Instance method ‘stroke(_:lineWidth:)’ requires that ‘Binding‘ conform to ‘ShapeStyle’

Swift
スポンサーリンク
こんにちは。 雑食会社員🐼くま子です
スポンサーリンク

背景

SwiftUIで、@BindingしているColorfill()stroke()に指定したらエラーになる

struct SelectColorView: View {
    @Binding var selectedColor: Color
    ...
}

struct Play: View {
    @ObservedObject var viewModel = SelectColorViewModel()

    var body: some View {
        Circle()
            .fill(self.$viewModel.selectedColor)
    }
}

L.11 Instance method ‘stroke(_:lineWidth:)’ requires that ‘Binding‘ conform to ‘ShapeStyle’

原因

@Bindingされた変数は、型がBindingでwrapされていて、
Binding<Color>型になっている

解決策

@Bindingされた変数のwrappedValueを使う

struct Play: View {
    @ObservedObject var viewModel = SelectColorViewModel()

    var body: some View {
        Circle()
            .fill(self.$viewModel.selectedColor.wrappedValue)
    }
}
SwiftUI初めてで、
@Bindingとかよくわからんけどめっちゃ便利じゃん!🥳
とか言ってたらまんまとはまった

コメント