1. ホーム
  2. swiftui

[解決済み] SwiftUI の @State 変数の初期化に関する問題

2022-09-22 17:31:08

質問

の値を初期化したい。 @State の値を初期化したいのですが、SwiftUI では init() メソッドで Struct のメソッドで、TextField での操作のために準備された辞書から適切なテキストを取得できるようにします。 ソースコードは以下のような感じです。

struct StateFromOutside: View {
    let list = [
        "a": "Letter A",
        "b": "Letter B",
        // ...
    ]
    @State var fullText: String = ""

    init(letter: String) {
        self.fullText = list[letter]!
    }

    var body: some View {
        TextField($fullText)
    }
}

残念ながら実行は失敗し、エラー Thread 1: Fatal error: Accessing State<String> outside View.body

どうしたら解決できますか?よろしくお願いします。

解決方法を教えてください。

私なら、初期化を onAppear .

struct StateFromOutside: View {
    let list = [
        "a": "Letter A",
        "b": "Letter B",
        // ...
    ]
    @State var fullText: String = ""

    var body: some View {
        TextField($fullText)
             .onAppear {
                 self.fullText = list[letter]!
             }
    }
}

あるいは、さらに良い方法として、モデル・オブジェクト ( BindableObject ビューにリンクされたモデルオブジェクト) を使用し、すべての初期化とビジネスロジックをそこで行います。ビューは自動的に更新され、変更を反映します。


更新してください。 BindableObject は現在 ObservableObject .