iOS RxSwift 如何检查 Result == .success 是否成功?
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
}
}
我只想shorthand检查是否成功,但编译器不允许这样做。
.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 { [=12=].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 约定。
我只对来自我的查询的 .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
}
}
我只想shorthand检查是否成功,但编译器不允许这样做。
.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 { [=12=].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 约定。