@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>型としてアクセスできるという決まりなのだと理解しました。
