【SwiftUI】@Bindingや@Stateをつけたプロパティをイニシャライザで初期化する
Error: 'self' used before all stored properties are initialized
こんな感じで素直にイニシャライザを定義してしまうと、上記のエラーが発生します。
WrappedTextField.swift
struct WrappedTextField: View {
private var placeholder: String?
@Binding private var textContent: String
init(placeholder: String? = nil, textContent: String) {
self.placeholder = placeholder
self.textContent = textContent
// Swift Compiler Error
// 'self' used before all stored properties are initialized
// Return from initializer without initializing all stored properties
}
var body: some View {
TextField(placeholder ?? "", text: $textContent)
.multilineTextAlignment(.center)
}
}
解決方法
Property Wrapperをつけたプロパティを初期化するには、暗黙的に定義される_textContent: Binding<String>
を使用する必要があります。
@Binding private var textContent: String
init(placeholder: String? = nil, textContent: Binding<String>) {
self.placeholder = placeholder
self._textContent = textContent
}
イニシャライザを自分で定義しなければ、呼び出し側では自動的に引数の型がBindingとなるため、Property Wrapperのことを意識しなくても使えるのですが、カスタムのイニシャライザを用意する場合は、Property Wrapperについて知っておかないといけません。
参考
Author And Source
この問題について(【SwiftUI】@Bindingや@Stateをつけたプロパティをイニシャライザで初期化する), 我々は、より多くの情報をここで見つけました https://qiita.com/turara/items/9758f13eb1de020ca476著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .