gpt4 book ai didi

swift - 执行 segue 时的异步检查

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

我的应用有两个 ViewController,LoginViewController,MainViewController

在 Storyboard 中,我创建了一个从 LoginViewController 到 MainViewController 的转场

现在我用Moya来实现登录功能,但是我想保留segue

所以我在LoginViewController中写了这个函数

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
var ret = false
let provider = MoyaProvider<MyApi>()
provider.request(.login(username : inUsername.text! , password : inPassword.text! )) { result in
switch result {
case let .success(moyaResponse):
let data = moyaResponse.data
do {
let decoder = JSONDecoder()
let user = try decoder.decode(Login.self, from: data)
if(user.status == 1){
ret = true
}else{
print(user.msg)
}
}
catch {
print("error")
}
case let .failure(error):
ret = false
}
}
return ret
}

但是moya请求是异步的,这个函数会在response之前返回,所以这个函数永远不会返回true

如何让它发挥作用?


更新:

现在我将请求移至按钮 IBAction,但它仍然不起作用

如果我删除shouldPerformSegue,它仍然会在回调之前转到下一个viewcontroller

如果我在 shouldPerformSegue 中返回 true,即使登录失败,它也会转到下一个 viewcontroller

如果我在 shouldPerformSegue 中返回 false,即使登录成功也不会转到下一个 viewcontroller

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
return true // always to next
return false // never to next
}

@IBAction func clickLogin(_ sender: Any) {

let provider = MoyaProvider<ZfuApi>()
provider.request(.login(username : inUsername.text! , password : inPassword.text! )) { result in
switch result {
case let .success(moyaResponse):
let data = moyaResponse.data
do {
let decoder = JSONDecoder()
let user = try decoder.decode(Login.self, from: data)
if(user.status == 1){
self.performSegue(withIdentifier: "loginToMain", sender: sender)
}else{
print(user.msg)
}
}
catch {
print("error")
}
case let .failure(error):
print(error.response?.description)
}
}
}

最佳答案

您不能在 shouldPerformSegue 中使用异步方法,但您可以在执行转场之前执行异步方法,然后在完成 block 中调用 performSegue(withIdentifier:sender:)

关于swift - 执行 segue 时的异步检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52641481/

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