gpt4 book ai didi

ios - 将 JSON 数据中的字符串发送到函数外部的变量

转载 作者:行者123 更新时间:2023-11-30 11:00:20 26 4
gpt4 key购买 nike

我正在尝试从 JSON 数据中获取字符串并将其设置为变量。我的问题是该变量显示为空。我正在使用 JSONDecoder 检索 JSON 数据并将字符串设置为函数外部的变量。然后我想在另一个函数中使用该变量

当我打印变量时,即使在加载函数后它仍然显示为空白。在函数内,字符串正确显示。

代码:

var filmTitle = ""

override func viewDidLoad() {
super.viewDidLoad()


loadFilms()
print(self.filmTitle) //Prints as an empty string

}

func loadFilms() {

let id = filmId
let apiKey = "97a0d64910120cbeae9df9cb675ad235"
let url = URL(string: "https://api.themoviedb.org/3/movie/\(id)?api_key=\(apiKey)&language=en-US")
let request = URLRequest(
url: url! as URL,
cachePolicy: URLRequest.CachePolicy.reloadIgnoringLocalCacheData,
timeoutInterval: 10 )

let session = URLSession (
configuration: URLSessionConfiguration.default,
delegate: nil,
delegateQueue: OperationQueue.main
)

let task = session.dataTask(with: request, completionHandler: { (dataOrNil, response, error) in
if let data = dataOrNil {
do { let details = try! JSONDecoder().decode(Details.self, from: data)
self.filmTitle = details.title
print(self.filmTitle) //string prints correctly

}
}
})


task.resume()

}

为了正确地将字符串设置为变量,我缺少什么?

最佳答案

从互联网加载数据是一种异步方法。在 loadFilms() 完成之前调用 print 语句。

完成后使用回调获取数据。

func loadFilms(completion: @escaping (Details?, Error?) -> Void) { 
//...

let task = session.dataTask(with: request, completionHandler: { (dataOrNil, response, error) in
if let data = dataOrNil {
do { let details = try JSONDecoder().decode(Details.self, from: data)
completion(details, nil)


} catch {
completion(nil, error)
}
})

}

在调用站点:

override func viewDidLoad() { 

loadFilms { details, error in

if error { //* Handle Error */ }

self.filmTitle = details.title
print(filmTitle)

}

}

关于ios - 将 JSON 数据中的字符串发送到函数外部的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53454471/

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