#swiftui #state
#swiftui #состояние
Вопрос:
Учитывая этот контекст:
struct MyView: View {
@State private var myString: String
}
Сначала я попытался инициализировать его таким образом:
init(_ string: String) {
self.myString = string
}
Но я получил эту ошибку:
Переменная ‘self.myString’, используемая перед инициализацией
Затем я сделал это:
init(_ string: String) {
self._myString = State(initialValue: string)
}
Это работает нормально, но поскольку декларативное программирование и состояние для меня в новинку, я не совсем понимаю разницу и что здесь происходит.
Комментарии:
1.
State
является оболочкой свойства. О оболочках свойств swift читайте docs.swift.org/swift-book/LanguageGuide/Properties.html#ID617
Ответ №1:
Использование @State var name: String
— это оболочка свойства, которая представляет собой приятную оболочку вокруг переменной, вызываемой _name
типа State<String>
. По сути, это:
struct MyView: View {
@State private var myString: String
}
переводится следующим образом:
struct MyView: View {
private var _myString: State<String>
private var $myString: Binding<String> {
_myString.projectedValue
}
private var myString: String {
get { _myString.wrappedValue }
set { _myString.wrappedValue = $0 }
}
}
что должно объяснить вашу проблему (инициализируется использование myString
before _myString
).