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