1

问题:

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

语境:

我正在围绕我们的 API 制作基于完成处理程序的包装器。传递回处理程序的参数包括一个enum给出响应状态的参数和一个User实例。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 都给出了很好的答案。唯一将他们分开的是亚历克斯在尼尔之前就回答了。谢谢两位!

4

2 回答 2

2

这样的事情呢?

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

或者你可以有一个Either/Result类型并且只将枚举用于错误场景?

static func createAccount(email: String, password: String, handler: (Result<User, ResponseError>) -> Void) { ... }
于 2015-07-02T16:26:32.733 回答
2

似乎是https://github.com/antitypical/Result的完美用例

于 2015-07-02T16:33:06.703 回答