[英]iOS RxSwift how to check if Result == .success?
我只對來自查詢的.success
類型的結果感興趣。
如何設置過濾器,使其僅通過Result<Value>
枚舉的.success結果?
public enum Result<Value> {
case success(Value)
case failure(Error)
}
query.filter{ (result: Result<Double>) in
switch result {
case .success:
return true
case .failure:
return false
}
}
我只想對成功進行速記檢查,但是編譯器不允許這樣做。
.filter{result in
return result == .success
}
這是一個單線,不像您描述的那么短,但是比開關短:
if case .success = result { return true } else { return false }
具有關聯值的枚舉需要模式匹配,因此您需要一個if
/ switch
/ for
/ while
來實現。
另外,如果您在多個地方使用這種過濾,則可以擴展Result
:
extension Result {
var isSuccess: Bool { if case .success = self { return true } else { return false } }
var isError: Bool { return !isSuccess }
}
,並使用以下擴展名:
query.filter { $0.isSuccess }
或一種函數方法,其中isSuccess
和isError
是全局函數:
func isSuccess<T>(_ result: Result<T>) -> Bool {
if case .success = result { return true } else { return false }
}
func isError<T>(_ result: Result<T>) -> Bool {
return !isSuccess(result)
}
// later in the code
query.filter(isSuccess)
后一種方法帶來一點點性能上的好處,因為編譯器不需要每次都創建另一個閉包,而將使用以isSuccess
名稱存儲的閉包。 盡管它並不完全符合建議添加成員函數而不是自由函數的Swift約定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.