SwiftUI @Binding Initialize - PullRequest
       16

SwiftUI @Binding Initialize

1 голос
/ 20 июня 2019

Играл с SwiftUI и до сих пор понимал концепцию BindableObjects и т. Д. (По крайней мере, я надеюсь, что понимаю).

Я столкнулся с глупой проблемой, которую я не могу найти для ответа: Как вы инициализируете переменную @Binding?

У меня есть следующий код:

struct LoggedInView : View {

    @Binding var dismissView: Bool

    var body: some View {
        VStack {
            Text("Hello World")
        }
    }
}

В моем коде предварительного просмотра я хочу передать этот параметр типа Binding<Bool>:

#if DEBUG
struct LoggedInView_Previews : PreviewProvider {
    static var previews: some View {
        LoggedInView(dismissView: **Binding<Bool>**)
    }
}
#endif

Как мне его инициализировать? пробовал:

Binding<Bool>.init(false)
Binding<Bool>(false)

Или даже:

@Binding var dismissView: Bool = false

Но никто не работал ... есть идеи?

Ответы [ 2 ]

4 голосов
/ 20 июня 2019

Когда вы используете LoggedInView в своем приложении, вам необходимо предоставить некоторую привязку, такую ​​как @State из предыдущего представления или @EnvironmentObject.

Для особого случая PreviewProvider, где вам просто нужно фиксированное значение, вы можете использовать .constant(false)

Например

#if DEBUG
struct LoggedInView_Previews : PreviewProvider {
    static var previews: some View {
        LoggedInView(dismissView: .constant(false))
    }
}
#endif
0 голосов
/ 20 июня 2019
  • Если вам нужно простое свойство, которое принадлежит одному представлению, вы следует использовать @ State
  • Если вам нужно сложное свойство, которое может принадлежат несколько видов (например, 2-3 вида), которые вы должны использовать @ ObjectBinding
  • Наконец, если вам нужно свойство, которое должно использовать все виды, вы должны использовать @ EnvironmentObject . Источник для подробной информации

Для вашего случая, если вы все еще хотите инициализировать переменную Binding, вы можете использовать:

var binding: Binding = .constant(false)
...