如何从 SwiftUI 中的函数 return 一个按钮?
How to return a Button from a function in SwiftUI?
我需要根据一些参数动态创建一个Button
func buildButton(parameter : Parameter) -> Button {
switch (parameter){
case Parameter.Value1:
return Button(
action: {
...
},
label: {
...
}
)
case Parameter.Value2:
return Button(
action: {...},
label: {
...
}
)
}
}
但是编译器给我这个错误:
Reference to generic type 'Button' requires arguments in <...>. Insert '<<#Label: View#>>'
所以如果我点击Fix
,函数声明就变成了
func buildButton(parameter : Parameter) -> Button<Label:View>
并且编译器给出
Use of undeclared type '<#Label: View#>'
我需要在此处插入什么才能return一个Button
?
如果您查看 Button
的声明,您会发现它是一个泛型 struct
,因此您需要提供其泛型类型参数。
struct Button<Label> where Label : View
确保将 YourView
替换为您想要 return 实现 View
的实际类型。
class YourView: View { ... }
func buildButton(parameter : Parameter) -> Button<YourView> {
switch (parameter){
case Parameter.Value1:
return Button(
action: {
...
},
label: {
...
}
)
case Parameter.Value2:
return Button(
action: {...},
label: {
...
}
)
}
}
我不确定你得到一个 Button 有多重要,但如果你只需要它在另一个 SwiftUI View 中显示而不需要进一步细化,你可以 return some View
.您只需将所有按钮嵌入到 AnyView 中即可。
func buildButton(parameter : Parameter) -> some View {
switch (parameter){
case Parameter.Value1:
return AnyView(Button(
action: {
...
},
label: {
...
})
)
case Parameter.Value2:
return AnyView(Button(
action: {...},
label: {
...
})
)
}
}
我需要根据一些参数动态创建一个Button
func buildButton(parameter : Parameter) -> Button {
switch (parameter){
case Parameter.Value1:
return Button(
action: {
...
},
label: {
...
}
)
case Parameter.Value2:
return Button(
action: {...},
label: {
...
}
)
}
}
但是编译器给我这个错误:
Reference to generic type 'Button' requires arguments in <...>. Insert '<<#Label: View#>>'
所以如果我点击Fix
,函数声明就变成了
func buildButton(parameter : Parameter) -> Button<Label:View>
并且编译器给出
Use of undeclared type '<#Label: View#>'
我需要在此处插入什么才能return一个Button
?
如果您查看 Button
的声明,您会发现它是一个泛型 struct
,因此您需要提供其泛型类型参数。
struct Button<Label> where Label : View
确保将 YourView
替换为您想要 return 实现 View
的实际类型。
class YourView: View { ... }
func buildButton(parameter : Parameter) -> Button<YourView> {
switch (parameter){
case Parameter.Value1:
return Button(
action: {
...
},
label: {
...
}
)
case Parameter.Value2:
return Button(
action: {...},
label: {
...
}
)
}
}
我不确定你得到一个 Button 有多重要,但如果你只需要它在另一个 SwiftUI View 中显示而不需要进一步细化,你可以 return some View
.您只需将所有按钮嵌入到 AnyView 中即可。
func buildButton(parameter : Parameter) -> some View {
switch (parameter){
case Parameter.Value1:
return AnyView(Button(
action: {
...
},
label: {
...
})
)
case Parameter.Value2:
return AnyView(Button(
action: {...},
label: {
...
})
)
}
}