gpt4 book ai didi

ios - Swift 异步方法和返回/完成 block

转载 作者:搜寻专家 更新时间:2023-11-01 07:20:02 24 4
gpt4 key购买 nike

我正在尝试在我的项目中创建一个采用一些输入参数的异步方法。如果参数正确,它将执行一些操作,然后调用完成 block 。

但是,如果输入参数不正确,它就不会执行这些操作(因此完成 block 将不会运行,我必须自己调用它)。

无论如何,我想知道最好的方法是什么...

我想我可以让该方法返回一个 Status 枚举,其中包括输入错误的内容,然后还有完成 block 。

问题是完成 block 也可能出错。那么也许这应该是不同的错误类型?

像这样...(以登录为例)

enum LoginRequestStatus {
case missingEmail
case missingPassword
case requestingLogin
}

然后完成的错误可能是...

enum LoginError: Error {
case noUserFound
case invalidPassword
case success
}

那么这个函数可能看起来像这样......

func login(withEmail email: String, password: String, completion: (LoginError?) -> ()) -> LoginStatus {
if email.isEmpty() {
return LoginStatus.missingEmail
}
if password.isEmpty() {
return LoginStatus.missingPassword
}

//make some async request here or something...

//... if error...
completion(LoginError.invalidPassword)

return LoginStatus.requestingLogin
}

这有意义吗?那是 Swifty(我讨厌这个词,但它描述了我的意思)?有什么不同的方法可以完全解决这个问题吗?

谢谢

最佳答案

在我看来,可以使用throws 来简化与方法的交互。我写了一个小例子。通过此实现,很容易避免因 exceptions 而导致的错误。如果请求成功,将显示清晰的响应状态。

抛出错误:

enum LoginError: ErrorType {
case missingEmail
case missingPassword
}

响应状态:

enum LoginRequestStatus {
case noUserFound
case invalidPassword
case success
}

功能实现:

func login(withEmail email: String, password: String) throws -> LoginRequestStatus {

guard email.characters.count > 0 else{
throw LoginError.missingEmail
}

guard password.characters.count > 0 else{
throw LoginError.missingPassword
}

// do some request

return LoginRequestStatus.success
}

关于ios - Swift 异步方法和返回/完成 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39637364/

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