gpt4 book ai didi

ios - Swift:返回json数据

转载 作者:行者123 更新时间:2023-11-30 11:43:35 28 4
gpt4 key购买 nike

我从 url 获取 json 数据,我想从函数返回到变量并再次使用它

internal func getJson(urlGet:String, urlData:String){
let urlFind = URL(string: urlGet)
var request = URLRequest(url: urlFind!)
request.httpMethod = "POST"
request.httpBody = urlData.data(using: .utf8)

var firstDataGet = [firstData]()

URLSession.shared.dataTask(with:request, completionHandler: {(data, response, error) in
guard let data = data, error == nil else { return }
print(urlGet)

do {
let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String:String]
print(json)

} catch let error as NSError {
json = nil
}
}).resume()

return json
}

以及 View Controller 的用法:

let result = getJsonLogin.getJson(urlGet: AppDelegate.ADDRESS+"/index.php", urlData: "mobile="+mobile+"")
print(result["message"])

我是初学者,我无法解决这个问题

最佳答案

URLSession 请求是异步的。

因此您需要设置回调来检索数据。就像这样:

internal func getJson(urlGet: String, urlData: String, completion: @escaping ([String:String]?) -> Void) {
let urlFind = URL(string: urlGet)
var request = URLRequest(url: urlFind!)
request.httpMethod = "POST"
request.httpBody = urlData.data(using: .utf8)

var firstDataGet = [firstData]()

URLSession.shared.dataTask(with:request, completionHandler: { (data, response, error) in
guard let data = data, error == nil else { return }
print(urlGet)

do {
let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String:String]
print(json)
completion(json)

} catch let error as NSError {
json = nil
completion(nil)
}
}).resume()
}


let result = getJsonLogin.getJson(urlGet: AppDelegate.ADDRESS+"/index.php", urlData: "mobile="+mobile+"") { result in
print(result)
}

当然,您可以(并且可能应该)比仅仅传递 nil 更正确地处理错误。但为了简单起见,我只是添加了我能想到的最简单的方法来解决您的问题。

关于ios - Swift:返回json数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49076403/

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