2015-07-02 62 views
1

問:返回非可選的.Success枚舉斯威夫特

如何在強制執行非可選類型要傳遞的方式定義一個函數時也被傳入一個枚舉類型爲.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。唯一分開的是亞歷克斯在尼爾面前回答。謝謝你們!

回答

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) { ... } 
+0

你真的是'結果<用戶,ResponseError>'?你不是指'ResponseStatus '? – Rob