在Swift中使用.Success枚举返回非可选项

时间:2015-07-02 16:21:10

标签: ios swift enums completionhandler

问题:

当传入的枚举类型为.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都给出了很好的答案。唯一让他们分开的是亚历克斯在尼尔面前回答的时刻。谢谢他们!

2 个答案:

答案 0 :(得分: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) { ... }

答案 1 :(得分:2)

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

的完美用例