SwiftUI中判断Int类型绑定值非零时出现‘() -> ()’无法符合‘ShapeStyle’类型错误的问题咨询
解决SwiftUI中判断Int类型@State值时的ShapeStyle错误
嘿,别担心,绑定并不是只有Bool类型才能用,你这是踩了个关于@State属性访问的小坑,和绑定类型没关系~
先给你贴修正后的可运行代码:
@State private var contentToPresent: Int = 0 var body: some View { VStack(spacing: 0) { // 直接用变量名判断就行,不用加.wrappedValue if contentToPresent != 0 { showView(id: $contentToPresent) } } }
错误原因拆解:
@State的访问方式错了
你写的contentToPresent.wrappedValue是多余的——@State包装的属性,直接调用变量名(比如contentToPresent)就已经拿到它的实际值了。只有当你拿到的是Binding类型(比如$contentToPresent)时,才需要用.wrappedValue去获取它的实际值。错误的访问方式让SwiftUI的视图构建系统误解了你的代码,才抛出了那个看起来莫名其妙的ShapeStyle错误。绑定支持多种类型
Binding完全支持Int、String、自定义类/结构体等几乎所有Swift类型,绝对不是只能绑定Bool。你之前封装成对象还是报错,大概率也是因为同样的@State访问错误,或者视图构建的语法小问题。
额外提示:检查showView的定义
如果修正后还是有问题,你可以确认下showView的函数定义是否正确接受Binding<Int>参数,比如应该是这样的:
func showView(id: Binding<Int>) -> some View { // 这里写你的视图逻辑,比如根据id展示不同内容 Text("当前ID:\(id.wrappedValue)") }
内容的提问来源于stack exchange,提问作者Warve
相关产品推荐
相关产品推荐

