这是一段对我有用的代码。。。
VStack(spacing: pad/2) {
getRgbColor(i:0)
.onTapGesture { editColor(i:0) }
.frame(width: pad, height: pad)
.border(.black.opacity(0.5), width: 1)
getRgbColor(i:1)
.onTapGesture { editColor(i:1) }
.frame(width: pad, height: pad)
.border(.black.opacity(0.5), width: 1)
getRgbColor(i:2)
.onTapGesture { editColor(i:2) }
.frame(width: pad, height: pad)
.border(.black.opacity(0.5), width: 1)
}
原作有更多的条目。它起了作用,但你可以看到它是如何重复的。我可能想制作一套6x4的补丁,看起来像麦克白的目标,所以我想知道是否有更好的方法不重复这么多。我试着把电话转到
getRgbColor()
呼叫
func getRgbColor(i:Int) -> SwiftUI.Color {
return SwiftUI.Color(red: R + rgbDel[i][0] * step,
green: G + rgbDel[i][1] * step,
blue: B + rgbDel[i][2] * step)
.onTapGesture { editColor(i:0) }
.frame(width: pad, height: pad)
.border(.black.opacity(0.5), width: 1) as! Color
}
这是编译的,但在我运行它时给出了SIGABRT。。。
无法强制转换类型的值
'SwiftUI.ModifiedContent<SwiftUI.ModifiedContent<SwiftUI.ModifiedContent<SwiftUI.颜色,
SwiftUI.AddGestureModifier<SwiftUI_结束手势<SwiftUI.点击手势>>>,
SwiftUI_FrameLayout>,
SwiftUI_套印格式修饰符<SwiftUI_形状视图<SwiftUI_笔划形状<SwiftUI.矩形_Inset>,
SwiftUI.Color>>>'(0x109735e90)转换为“SwiftUI.Color”(0x1ec3b9eb8)。
2022-10-01 12:38:49.468445+0100 ByEye[2810:493288]无法施放
类型的值
'SwiftUI.ModifiedContent<SwiftUI.ModifiedContent<SwiftUI.ModifiedContent<SwiftUI.颜色,
SwiftUI.AddGestureModifier<SwiftUI_结束手势<SwiftUI.点击手势>>>,
SwiftUI_FrameLayout>,
SwiftUI_套印格式修饰符<SwiftUI_形状视图<SwiftUI_笔划形状<SwiftUI.矩形_Inset>,
SwiftUI.Color>>>'(0x109735e90)转换为“SwiftUI.Color”(0x1ec3b9eb8)。
有一个巧妙的解决方案吗?
是的。我没有想到调用修饰符会改变底层类型,因为我写的大部分内容都在cpp中,这是不可想象的。在第一条注释之后,我编写并重新命名了getRgbColor()函数。。。
func rgbButton(i:Int) -> some View {
return SwiftUI.Color(red: R + rgbDel[i][0] * step,
green: G + rgbDel[i][1] * step,
blue: B + rgbDel[i][2] * step)
.onTapGesture { editColor(i:i) }
.frame(width: pad, height: pad)
}