gpt4 book ai didi

swift - 完成处理程序完成前为真

转载 作者:行者123 更新时间:2023-11-30 10:29:16 27 4
gpt4 key购买 nike

所以我有一个函数可以从 API 获取引用和作者。我有一个完成处理程序,以便我可以获取引用和作者,然后将它们设置为 Viewdidload 函数中各自的 UILabel。但由于某种原因,引用和作者都为零。处理程序出了什么问题?

    func getJSON(completionHandler: @escaping(CompletionHandler)){
if let quoteURL = URL(string: "http://quotes.rest/qod.json")

{
let session = URLSession.shared


let task = session.dataTask(with: quoteURL)
{ (data, response, error) -> Void in
if data != nil
{
let quoteData = JSON(data: data!)

self.quote = quoteData["contents"]["quotes"][0]["quote"].stringValue
self.author = quoteData["contents"]["quotes"][0]["author"].stringValue


}
}
task.resume()
}
completionHandler(true)
}

调用Viewdidload()中的函数

        self.getJSON(completionHandler: {(success)-> Void in

if(success){
self.quoteLabel.text = "\(self.quote ?? "") - \(self.author ?? "")"
}
})

Swift 不允许您在后台进程中设置 UILabel 文本,这就是为什么我无法在 getJSON() 中执行此操作谢谢

最佳答案

您需要将其插入回调内

func getJSON(completionHandler: @escaping(CompletionHandler)){
if let quoteURL = URL(string: "http://quotes.rest/qod.json")
{
let session = URLSession.shared
let task = session.dataTask(with: quoteURL)
{ (data, response, error) -> Void in
if data != nil
{
let quoteData = JSON(data: data!)

self.quote = quoteData["contents"]["quotes"][0]["quote"].stringValue
self.author = quoteData["contents"]["quotes"][0]["author"].stringValue

completionHandler(true) // set it inside the callback
}
else {
completionHandler(false)
}
}
task.resume()
}
else {
completionHandler(false)
}
}

关于swift - 完成处理程序完成前为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59459929/

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