SwiftUI 中的可选绑定

Posted

技术标签:

【中文标题】SwiftUI 中的可选绑定【英文标题】:Optional Binding in SwiftUI 【发布时间】:2020-05-31 00:02:48 【问题描述】:

我正在尝试在 Binding 上创建一个扩展,以便我可以打开并绑定到可选的 Binding。

我有以下从 *** 获得的代码。

extension Binding 

    static func ??<T>(lhs: Binding<Optional<T>>, rhs: T) -> Binding<T> 

        return Binding(
            get:  lhs.wrappedValue ?? rhs ,
            set:  lhs.wrappedValue = $0 
        )

    

但我收到以下错误:

【问题讨论】:

【参考方案1】:

当你使用Binding(...)的初始化器时,它会推断出它的类型参数是Value(记住,Binding本身是一个泛型,Value是它的类型参数),所以实际上它是这样做的:

Binding<Value>(...)

但期望返回为Binding&lt;T&gt;

所以,你既可以显式使用Binding&lt;T&gt;(...),也可以让编译器根据函数的返回值来推断:

static func ??<T>(lhs: Binding<Optional<T>>, rhs: T) -> Binding<T> 
   .init(get  lhs.wrappedValue ?? rhs ,
         set  lhs.wrappedValue = $0 )

或者,只需使用Value 而不是T

static func ??(lhs: Binding<Optional<Value>>, rhs: Value) -> Binding<Value> 
   Binding(get  lhs.wrappedValue ?? rhs ,
           set  lhs.wrappedValue = $0 )

【讨论】:

以上是关于SwiftUI 中的可选绑定的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 中的可选状态或绑定

SwiftUI 文本字段中的可选链接绑定值

SwiftUI - 我们如何重新绑定绑定的可选参数?

可选字符串数组作为绑定参数 SwiftUI [重复]

Combine + SwiftUI 中的最佳数据绑定实践?

如何解开可选的@State以用于调用需要在swiftui中绑定的东西[重复]