【发布时间】:2019-02-03 08:41:21
【问题描述】:
我正在尝试使用 Struct 从 Firestore 读取 Dictionary[Any] 类型。我可以将值加载到任何类型的变量“数据”字典中。 但是我不能通过它循环访问正常的嵌套字典变量。 我无法打印键值。
以下是我的代码:
class PullQuestions {
//shared instance variable
**public var data = [Any]()**
private var qdb = Firestore.firestore()
public struct questionid
{
let qid : String
var questions : [basequestion]
var answers: [baseans]
}
public struct basequestion {
let category : String
let question : String
}
public struct baseans {
let answer : String
}
class var sharedManager: PullQuestions {
struct Static {
static let instance = PullQuestions()
}
return Static.instance
}
static func getData(completion: @escaping (_ result: [Any]) -> Void) {
let rootCollection = PullQuestions.sharedManager.qdb.collection("questions")
//var data = [Any]()
rootCollection.order(by: "upvote", descending: false).getDocuments(completion: {
(querySnapshot, error) in
if error != nil {
print("Error when getting data \(String(describing: error?.localizedDescription))")
} else {
guard let topSnapshot = querySnapshot?.documents else { return }
// var questiondoc = [basequestion]()
for questioncollection in topSnapshot {
rootCollection.document(questioncollection.documentID).collection("answers").getDocuments(completion: {
(snapshot, err) in
guard let snapshot = snapshot?.documents else { return }
var answers = [baseans]()
for document in snapshot { //There should be only one Document for each answer collection
//Read thru all fields
for i in 0..<document.data().count
{
let newAns = baseans(answer: answer)
print("Answer Docs=>", (answer))
answers.append(newAns)
}
}
let qid = questioncollection.documentID
let category = questioncollection.data()["category"] as! String
let question = questioncollection.data()["question"] as! String
let newQuestions = basequestion(category: category ,question: question)
let newQuestionDict = questionid(qid: qid, questions: [newQuestions], answers: answers)
PullQuestions.sharedManager.data.append(newQuestionDict)
//Return data on completion
completion(PullQuestions.sharedManager.data)
})
}
}
})
}
}
我可以这样打印
print("Count =>", (PullQuestions.sharedManager.data.count))
// print(PullQuestions.sharedManager.data.first ?? "Nil")
print(PullQuestions.sharedManager.data[0])
for element in PullQuestions.sharedManager.data
{
print("Elements in data:=>", (element))
}
我只能访问密钥..我如何去获取嵌套值?
【问题讨论】:
-
不相关但类
sharedManagerin structStaticin classPullQuestions是荒谬的,Swift 1 遗留。将行static let instance = PullQuestions()放入PullQuestions并删除整个sharedManager类 -
Vadian,感谢您的指出..我从一个聪明的老人那里得到了这个代码 sn-p..所以他做了他的工作..如果我按照你的建议声明实例,我会怎么样可以在 PullQuestions 的另一个类中使用它吗?
-
只要
PullQuestions.instance。 -
按照您的建议进行了更改.. 像以前一样工作.. 非常感谢 Vedian..
标签: ios swift dictionary