@Bindingを付与したプロパティに関する初期化時のエラー

この記事は約2分で読めます。

@Bindingを付与したプロパティを明示的に初期化したい時、下記のようなコードを書くと、『Cannot assign value of type ‘Binding<String>’ to type ‘String』というエラーが発生してしまいます。

import SwiftUI

struct wrapperErr: View {
    @State var upperView: String = ""
    var body: some View {
        wrapperErrUnder(arg: $upperView)
    }
}

struct wrapperErrUnder: View {
    @Binding var underView: String
    init (arg: Binding<String>) {
        self.underView = arg
    }
    var body: some View {
        Text("Hello, World!")
    }
}

エラーの内容

詳しくエラー内容について、解説されているサイトなどを見つけられなかったのですが、エラーメッセージをそのまま読み取ると、「Binding<String>型の値をString型のプロパティに代入できない」という意味です。

initの引数である”arg”はBinding<String>であるのに対して、”self.underView”は、String型と判断されているためと思われます。

解決方法

解決するには、init内のコードのself.underViewを『sekf._underView』に書き換えます。

    init (arg: Binding<String>) {
        self._underView = arg
    }

PropertyWrapperを付与しているプロパティに対して、頭に“_ (アンダーバー)”を付けることで、Binding<String>型としてアクセスできるという決まりなのだと理解しました。

タイトルとURLをコピーしました