SwiftUI | Cannot convert value of type ‘xxx’ to expected argument type ‘Binding‘の対処方法

SwiftUI

SwiftUIのCannot convert value of type ‘xxx’ to expected argument type ‘Binding’の対処方法を説明する。

結論

Binding<xxx>を入れるところに$変数名を入れる。

暫定的に対処するだけなら.constant(値)を入れておいても良い。

具体例

  1. Binding<xxx>を入れるところに入れたい変数ヨシヒコのHPを定義する。
  2. Binding<xxx>を入れるところに$ヨシヒコのHPを入れる。
import SwiftUI

struct ContentView: View {
    @State var ヨシヒコのHP: Int = 1     // 1
    var body: some View {
        ゆうしゃ(HP: $ヨシヒコのHP)       // 2
    }
}

struct ゆうしゃ: View {
    @Binding var HP: Int

    var body: some View {
        Text(String(HP))
    }
}

暫定的に対処するだけなら.constant(値)と入れておけば良い。これにより値に指定した固定値が入る。この方法ならわざわざ@State var xxxみたいに変数を定義しなくてよいので楽。ちょっとデバッグしたいだけのような場合ならこの方法で十分な場合も多い。

import SwiftUI

struct ContentView: View {

    var body: some View {
        ゆうしゃ(HP: .constant(1))  // ここ
    }
}

struct ゆうしゃ: View {
    @Binding var HP: Int

    var body: some View {
        Text(String(HP))
    }
}

メモ

$変数名とする理由は参照で渡さないといけない仕組みになっているため。詳細は下記記事参照。

まとめ

SwiftUIのCannot convert value of type ‘xxx’ to expected argument type ‘Binding’の対処方法を説明した。

コメント

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