gpt4 book ai didi

swift - 从 observeSingleEvent 返回两个数组

转载 作者:行者123 更新时间:2023-11-28 12:25:01 25 4
gpt4 key购买 nike

我在 Firebase 实时数据库中有问题和答案,我需要将其下载并放入数组中。我创建了一个函数,它接受一个参数并且应该返回两个数组

let data = fetchQuestions(category: "Animals")
qAni = data.ques
aAni = data.ans

获取问题方法:

func fetchQuestions(category: String) -> (ques: [String], ans: [String]) {
var q = [String]()
var a = [String]()
ref.child("QA/Category").observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? [String: Any]
for (k, v) in value! {
if k == category {
let QA = v as! NSArray
for i in QA {
let question = i as! [String: String]
q.append(question["question"]!)
a.append(question["answer"]!)
}
return (q, a) ** Unexpected non-void return value in void function
}
}
})
}

我曾尝试使用调度组,但随后收到不同的错误。

最佳答案

你当前正在从observeSingleEvent的完成 block 返回,它的返回类型是void,你需要的是你需要创建completionHandler使用您的 fetchQuestions。现在使用 Swift 而不是使用 NSArray 使用 Swift native 数组。此外,不是维护两个数组,而是维护一个包含自定义结构或类对象的数组。

所以首先像这样创建一个struct

struct Category {
let question: String
let answer: String
}

现在用你的 fetchQuestions 像这样创建 completionHandler。

func fetchQuestions(category: String, completion: @escaping([Category]) -> Void) {
var array = [Category]
ref.child("QA/Category").observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? [String: Any]
for (k, v) in value! {
if k == category {
let QA = v as! [[String:String]]
for i in QA {
let que = i["question"]!
let ans = i["answer"]!
array.append(Category(question: que, answer: ans))
}
}
}
completion(array)
})
}

现在以这种方式调用fetchQuestions

self.fetchQuestions(category: "Animals") { categories in
//access categories here
print(categories)
}

注意:除了在 for 循环中比较值之外,您还可以在请求中使用 queryEqual(toValue:) 来获取特定结果,请检查 SO thread了解更多详情。

关于swift - 从 observeSingleEvent 返回两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43672313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com