gpt4 book ai didi

swift - 从回调函数swift中获取值

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

问题 我想获得从我的 ApiToken 函数返回的值,以便我可以在另一个函数中使用它。由于某种原因,我无法从此函数中获取值,它不会返回任何内容。我如何从我的 ApiToken 函数返回值并在另一个函数中使用它。

这是我的带有 ApiToken 函数的 GetApiToken 类

class GetApiToken {



public func ApiToken(link: String, completionBlock: @escaping (String) -> Void) -> Void
{
let url = URL(string: link)!
let jsonDict = ["username": "snow", "password": "ssssssssss"]
let jsonData = try! JSONSerialization.data(withJSONObject: jsonDict, options: [])

var request = URLRequest(url: url)
request.httpMethod = "post"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = jsonData

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
if let error = error {
print("error:", error)
return
}

do {
guard let data = data else { return }

guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: AnyObject] else { return }

//self.token = json["access_token"] as? String ?? "x"
completionBlock((json["access_token"] as? String)!)



} catch {
print("error:", error)
}
}

task.resume()
}
}

这是我试图获得值(value)的地方

func getData(_ link:String)
{
let url = URL(string: link)!
var request = URLRequest(url: url, cachePolicy: .reloadIgnoringCacheData, timeoutInterval: 20)
request.httpMethod = "GET"
var output = ""
GetApiToken().ApiToken(link: "http://localhost:5000/auth", completionBlock: { str in
output = str

})
request.addValue("JWT \(output)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type") ..........

最佳答案

这是一个异步调用,因此您需要将在完成回调中检索到数据后发生的所有事情放在一起

func getData(_ link:String)
{
let url = URL(string: link)!
var request = URLRequest(url: url,
cachePolicy: .reloadIgnoringCacheData,
timeoutInterval: 20)
request.httpMethod = "GET"
GetApiToken().ApiToken(link: "http://localhost:5000/auth",
completionBlock:
{ output in
request.addValue("JWT \(output)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
.......
})

关于swift - 从回调函数swift中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46492119/

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