Return 非可选 Swift 中的 .Success 枚举

Return non-optional with .Success enum in Swift

问题:

当传入的枚举类型为 .Success 时,如何以强制传递非可选类型的方式定义函数?如果无法做到这一点,最好的建模方法是什么?

上下文:

我正在围绕我们的 API 制作基于完成处理程序的包装器。传回处理程序的参数包括提供响应状态的 enumUser 实例。 enum 是这样的:

enum ResponseStatus : Int {
    case Success                    = 200
    case InvalidParameters          = 422
    // and a few more
}

方法签名是这样的:

static func createAccount(email: String, password: String, handler: (status: ResponseStatus, user: User?) -> ())

问题在于 .Success 可能会与 nil 一起返回给用户,这不应该发生。

我希望能够强制执行如果 .Success 通过,则用户不能是 nil。这可以做到吗?如果没有,最好的管理方法是什么?

在此先感谢您的帮助。


来自@AlexsanderAkers 和@neilkimmett 的出色回答。唯一不同的是亚历克斯比尼尔早了几分钟回答。谢谢两位!

这样的事情怎么样?

enum ResponseStatus<T> {
    case Success(T)
    case InvalidParameters
    // other cases
}

或者您可以使用 Either/Result 类型并且仅将枚举用于错误场景?

static func createAccount(email: String, password: String, handler: (Result<User, ResponseError>) -> Void) { ... }

似乎是 https://github.com/antitypical/Result

的完美用例