66473


別の処理で必要な初期化がありstruct内にinit()を記載しましたが、Binding変数があるからか初期化でエラーが出ています。

”Return from initializer without initializing all stored properties”

@Binding変数は@State変数の中身を引き継いでいる為、そもそも初期化してしまったら、変数の中身の引き継ぎが出来ないのではないかとも考えてます。

質問  
Binding変数を初期化する方法がありましたら、ご教授頂けますでしょうか。  
コード一部抜粋は以下の通りです。

[code]

    struct ConfirmView: View{
    
        var appSyncClient: AWSAppSyncClient?
        init() {
             let appDelegate = UIApplication.shared.delegate as! AppDelegate
             appSyncClient = appDelegate.appSyncClient
         }
    
        @Binding var name:String
        @Binding var gender:Int
        @Binding var birthDate:Date
        @Binding var mail:String
        @Binding var password:String
        var seibetu = ["男","女"]
        var body: some View {
    
[/code]

どうぞよろしくお願い致します。

## 追記

試したこと

初期化の部分に

[code]

    init(name: Binding<String>,gender: Binding<Int>,birthdate: Binding<Date>,mail: Binding<String>,password: Binding<String>)
    
[/code]

と記載してみましたが変わりませんでした。


CC BY-SA 4.0
2020-05-09T21:57:22.587
66472
2020-05-11T03:49:35.000
2020-05-11T03:49:35.000
19110
39728
question
swift swiftui
Swift Binding変数の初期化の仕方について


基本的には、[こちら](https://ja.stackoverflow.com/a/63305/13972)に説明したのと全く同じことになるのですが、

  * **`@Binding`の付いたプロパティの初期化には、`_プロパティ名`と言うプロパティを`Binding<T>`型で初期化しないといけません。**

[code]

        init(name: Binding<String>, gender: Binding<Int>, birthdate: Binding<Date>, mail: Binding<String>, password: Binding<String>) {
            let appDelegate = UIApplication.shared.delegate as! AppDelegate
            appSyncClient = appDelegate.appSyncClient
    
            self._name = name
            self._gender = gender
            self._birthDate = birthdate
            self._mail = mail
            self._password = password
        }
    
[/code]

* * *

ただ、今回の場合、`appDelegate`なんて格納型プロパティを初期化する必要がなければ、`init()`を書く必要もなくなるので、Swiftがイニシャライザを自動生成してくれます。

例えばこんな感じ:

[code]

        var appSyncClient: AWSAppSyncClient? {
            (UIApplication.shared.delegate as! AppDelegate).appSyncClient
        }
    
[/code]

(この場合、`init()`の定義は削除する。)


CC BY-SA 4.0
2020-05-10T00:09:14.537
66473
2020-05-10T00:09:14.537
13972
66472
answer