Viewのinitの処理をカスタマイズしたいと思い、下記のようなコードを書きました。
struct TestView: View { @State var number: Float @State var number2: Float init(number: Float) { self.number = number } var body: some View { VStack{ Text("number: \(number2)") } .onAppear(){ number2 = number * 2 } } }
すると、initの箇所で、
Return from initializer without initializing all stored properties
のエラーが出ました。
「全てのプロパティが初期化されない状態で、init()を終了できません。」
という意味ですね。
number2が初期化されていない状態を指摘されています。
初期化されていないプロパティがあれば初期化を済ませましょう。
なお、余談ではありますが、@Stateのプロパティに初期値が設定されている状態では、init内でプロパティに値を代入することができません。
struct TestView: View { @State var number: Float @State var number2: Float = 1.0 init(number: Float) { self.number = number self.number2 = 4.0 } var body: some View { VStack{ Text("number: \(number2)") } } }
上記のコードでは、「number: 1.0」と表示されます。
init内での「self.number2 = 4.0」が反映されていません。ビルドエラーや実行エラーが出るわけではありません。
どうしてもinit内で初期化された@Stateのプロパティを再設定したい場合は、下記の手法が有効です。
@State var number: Float @State var number2: Float = 1.0 init(number: Float) { self.number = number self._number2 = State.init(initialValue: Float(4.0)) }
SwiftUIで開発したアプリをご紹介しておきます。
appdev.blitz-time.com