Прежде всего, рассмотрите использование соглашений кода Swift (например, ваши структуры названы строчными буквами, но вы должны начинать с заглавной буквы), это сделает ваш код более читабельным.
Возвращаясь к вашему вопросу.Вы используете массив вместо словаря (этот кусок кода: public var data = [Any]()
).И здесь вы пытаетесь напечатать значения:
for element in PullQuestions.sharedManager.data
{
print("Elements in data:=>", (element))
}
В этом контексте element
является Any
объектом, поэтому вы не можете получить доступ к каким-либо базовым свойствам.Для этого у вас есть два варианта:
1.Вы должны указать тип объектов массива в его объявлении следующим образом:
public var data = [questionid]()
или вы можете использовать это:
public var data: [questionid] = []
Эти два равны, используйте тот, который вы предпочитаете.
2. Если по каким-либо причинам вы не хотите указывать тип в объявлении, вы можете привестиэто в вашем цикле. Например:
for element in PullQuestions.sharedManager.data
{
if let element = element as? quetionid {
print("Elements in data:=>", (element))
// you can also print element.qid, element.questions, element.answers
} else {
print("Element is not questionid")
}
}
Вы, конечно, можете использовать приведение силы:
let element = element as! questionid
и избежать синтаксиса if let
(или guard let
, если хотите), но я бы не рекомендовал это, потому что это (потенциально) может привести к сбою вашего приложения, если элемент будет nil или любого другого типа.