Невозможно преобразовать значение типа Binding <Double>в ожидаемый тип аргумента Binding ' - PullRequest
2 голосов
/ 08 мая 2020

Иногда мне нужно передать значение в свойство @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 как необязательный тип.
Есть ли другой способ?

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Вот решение, которое позволяет устранить неоднозначность без привязки значений и без привязки.

Протестировано с 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")
            }
        }
    }
}
0 голосов
/ 08 мая 2020

Сделайте постоянным 0.

@Binding var prop: Double

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