我正在尝试使以下代码起作用:
extension Picker where Label == Text, SelectionValue == Bool {
init(selection: Binding<SelectionValue>) {
self.init("Bool", selection: selection) {
Text("TRUE").tag(true)
Text("FALSE").tag(false)
}
}
}
但是出现此编译器错误:
无法将类型“ TupleView <(某些视图,某些视图)>”的值转换为闭合结果类型“内容”
目标是能够通过以下方式创建选择器:
@State private var value = false
var body: some View {
Form {
Picker($value)
}
}
我了解编译器会尝试从初始值设定项的调用者推断Content
,但是由于我正在调用现有的初始值设定项并为其提供内容,为什么我仍然会看到此错误?
答案 0 :(得分:1)
您指定了Label
的{{1}}和SelectedValue
类型应该在扩展头中,而不是Picker
,因此此初始化程序将与所有各种内容类型。但是您真的不想要那个吗?该初始化程序仅产生具有以下特定类型的Content
的选择器:
Content
但是我们不能真正命名它的类型,因为它是{
Text("TRUE").tag(true)
Text("FALSE").tag(false)
}
,并且不能像这样使用不透明类型:
TupleView<(some View, some View)>
解决此问题的一种方法是将// nope!
extension Picker where Label == Text, SelectionValue == Bool, Content == TupleView<(some View, some View)> {
s包装在Text
s中:
AnyView