Swift 可选泛型的扩展
Swift extension of generic type that is Optional
当 SwiftUI Binding 的值为任何可选类型时,我想扩展它。
可以吗
extension Binding where Value == Optional {
func filter(_ predicate: @escaping (Value) -> Bool) -> Binding<Value> {
Binding<Value>(
get: {
if predicate(wrappedValue) { return nil }
return wrappedValue
},
set: {
wrappedValue = [=11=]
}
)
}
}
如果我使用某种具体类型(如 Error?),它会起作用吗?但我想要更通用的解决方案。
您可以在 T? == Value
处创建通用 T
。这意味着 Value
是可选的(并且 T
是可选的包装值,即使我们并不直接需要这种类型)。
代码:
extension Binding {
func filter<T>(_ predicate: @escaping (Value) -> Bool) -> Binding<Value> where T? == Value {
Binding<Value>(
get: {
if predicate(wrappedValue) { return nil }
return wrappedValue
},
set: {
wrappedValue = [=10=]
}
)
}
}
当 SwiftUI Binding 的值为任何可选类型时,我想扩展它。 可以吗
extension Binding where Value == Optional {
func filter(_ predicate: @escaping (Value) -> Bool) -> Binding<Value> {
Binding<Value>(
get: {
if predicate(wrappedValue) { return nil }
return wrappedValue
},
set: {
wrappedValue = [=11=]
}
)
}
}
如果我使用某种具体类型(如 Error?),它会起作用吗?但我想要更通用的解决方案。
您可以在 T? == Value
处创建通用 T
。这意味着 Value
是可选的(并且 T
是可选的包装值,即使我们并不直接需要这种类型)。
代码:
extension Binding {
func filter<T>(_ predicate: @escaping (Value) -> Bool) -> Binding<Value> where T? == Value {
Binding<Value>(
get: {
if predicate(wrappedValue) { return nil }
return wrappedValue
},
set: {
wrappedValue = [=10=]
}
)
}
}