【问题标题】:Return non-optional with .Success enum in Swift在 Swift 中使用 .Success 枚举返回非可选
【发布时间】:2015-07-02 16:21:10
【问题描述】:

问题:

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

【问题讨论】:

    标签: ios swift enums completionhandler


    【解决方案1】:

    这样的事情呢?

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

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

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

    【讨论】:

    • 你真的是指Result&lt;User, ResponseError&gt;吗?你不是说ResponseStatus&lt;User&gt;吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多