swift 无法将类型“Binding”的值转换< Double>为预期的参数类型“Binding&lt;Double?&gt;'

cl25kdpy  于 2023-09-30  发布在  Swift
关注(0)|答案(3)|浏览(98)

有时候我想把一个值传递给@Binding属性,有时候我不想。

struct ParentView: View {
    @State var prop = 0.0

    var body: some View {
        ChildView(prop: $prop) // Error: Cannot convert value of type 'Binding<Double>' to expected argument type 'Binding<Double?>'
        ChildView() // sometimes I do not want pass anything
    }
}

struct ChildView: View {
    @Binding var prop: Double?

    init(prop: Binding<Double?> = .constant(nil)) {
        _prop = prop
    }

    var body: some View {
        Text("Child View")
    }
}

解决方案可以是以下代码。

@State var prop: Double? = 0.0

但是,如果可能的话,我不想将@State属性定义为Optional类型。
还有别的办法吗

sxissh06

sxissh061#

这里有一个解决方案,可以消除w/和w/o值绑定的歧义。
使用Xcode 11.4 / iOS 13.4测试

struct ChildView: View {
    @Binding var prop: Double?

    init() {
        _prop = .constant(nil)
    }

    init(prop: Binding<Double>) {
        _prop = Binding(prop)
    }

    var body: some View {
        Group {
            if prop != nil {
                Text("Child View: \(prop!)")
            } else {
                Text("Child View")
            }
        }
    }
}
wljmcqd8

wljmcqd82#

使常数为0。

@Binding var prop: Double

init( prop: Binding<Double> = .constant(0) ) {
  _prop = prop
}
kxeu7u2r

kxeu7u2r3#

这是Xcode中显示的一般错误。尝试将值转换为所需的数据类型,如下所示:

var value = Double(input) ?? 0.0

使用回退值,以便如果输入是nan或错误的,它将使用该值。

相关问题