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=]
            }
        )
    }
}