gpt4 book ai didi

swift - SwiftUI 中的可选绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 02:35:36 25 4
gpt4 key购买 nike

我正尝试在 Binding 上创建一个扩展,这样我就可以解包并绑定(bind)到可选的 Binding。

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

extension Binding {

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

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

}
}

但是我得到以下错误:

enter image description here

最佳答案

当您使用 Binding(...) 的初始化程序时, 它推断其类型参数为 Value (记住,Binding 本身就是一个泛型,Value 是它的类型参数),所以实际上它是这样做的:

Binding<Value>(...)

但期望返回值是 Binding<T> .

因此,您可以显式使用 Binding<T>(...) ,或者让编译器根据函数的返回值推断它:

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

关于swift - SwiftUI 中的可选绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62110081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com