Почему SwiftUI требует инициализации стиля _propertyName для переменных @Binding и @State? - PullRequest
1 голос
/ 11 апреля 2020

Если вы попытаетесь создать SwiftUI View со свойством @State или @Binding

ex:

struct TestView: View {
    @Binding var foo: String

    init(foo: Binding<String>) {
        self.foo = foo
    }

    var body: some View {
        Text(foo)
    }
}

, вы получите ошибку: Cannot assign value of type 'Binding<String>' to type 'String'

Если вы измените инициализатор на:

init(foo: Binding<String>) {
    _foo = foo
}

Он «просто работает».

Что происходит с синтаксисом «_»? Что это на самом деле делает? Похоже, вы устанавливаете ивар в Obj C, но я очень сомневаюсь, что это то, что происходит.

1 Ответ

2 голосов
/ 11 апреля 2020

@Binding просто создает другое свойство для вас, как, например,

struct TestView: View {
    @Binding var foo: String

равно

struct TestView: View {
    var foo: String
    var _foo: Binding<String>

, поэтому теперь ясно, что в следующем init вы просто инициализируете соответствующий участник

init(foo: Binding<String>) {
    _foo = foo
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...