如何使用 ViewModifiers return 视图
How to return a view with ViewModifiers
我想 return 根据数组中字段的内容创建一个视图。这有效,但如果我尝试将 ViewModifier 添加到视图,我会遇到问题。这行不通。
struct CodesView: View {
var body: some View {
ScrollView{
ForEach(0 ..< codes.count) {idx in
Result(selector: self.codes[idx].Zeile)
}
}
}
}
struct Result: View{
var selector: String
var body: some View{
switch selector {
case "->Text1":
return VStack{
Text("Lorem ipsum dolor sit amet")
.bold()
}
// serval other case will follow...
default:
return VStack{
Text("\(selector)")
.frame(width: 350, alignment: .leading) // line throw an error
.font(.system(.body, design: .monospaced)) // line throw an error
}
}
}
}
错误信息是:
函数声明了一个不透明的 return 类型,但其主体中的 return 语句没有匹配的基础类型
我需要如何声明函数才能使用 ViewModifier 获取结果?对于不同的 returned 视图,我需要不同的布局。
以下解决你的问题
struct Result: View {
var selector: String
var body: some View {
Group {
if self.selector == "->Text1" {
VStack {
Text("Lorem ipsum dolor sit amet")
.bold()
}
} else {
VStack {
Text("\(selector)")
.frame(width: 350, alignment: .leading)
.font(.system(.body, design: .monospaced))
}
}
}
}
}
您不能在正文中使用 switch 语句。这里只允许简单的"if"。
但在这里检查这个答案,它有帮助:
示例:
enum T {
case a
case b
}
struct ContentView: View {
var a : T = .a
var body : some View {
Group { () -> Text in
switch a {
case .a:
return Text("a")
case .b:
return Text("b")
}
}
}
}
我想 return 根据数组中字段的内容创建一个视图。这有效,但如果我尝试将 ViewModifier 添加到视图,我会遇到问题。这行不通。
struct CodesView: View {
var body: some View {
ScrollView{
ForEach(0 ..< codes.count) {idx in
Result(selector: self.codes[idx].Zeile)
}
}
}
}
struct Result: View{
var selector: String
var body: some View{
switch selector {
case "->Text1":
return VStack{
Text("Lorem ipsum dolor sit amet")
.bold()
}
// serval other case will follow...
default:
return VStack{
Text("\(selector)")
.frame(width: 350, alignment: .leading) // line throw an error
.font(.system(.body, design: .monospaced)) // line throw an error
}
}
}
}
错误信息是: 函数声明了一个不透明的 return 类型,但其主体中的 return 语句没有匹配的基础类型
我需要如何声明函数才能使用 ViewModifier 获取结果?对于不同的 returned 视图,我需要不同的布局。
以下解决你的问题
struct Result: View {
var selector: String
var body: some View {
Group {
if self.selector == "->Text1" {
VStack {
Text("Lorem ipsum dolor sit amet")
.bold()
}
} else {
VStack {
Text("\(selector)")
.frame(width: 350, alignment: .leading)
.font(.system(.body, design: .monospaced))
}
}
}
}
}
您不能在正文中使用 switch 语句。这里只允许简单的"if"。
但在这里检查这个答案,它有帮助:
示例:
enum T {
case a
case b
}
struct ContentView: View {
var a : T = .a
var body : some View {
Group { () -> Text in
switch a {
case .a:
return Text("a")
case .b:
return Text("b")
}
}
}
}