【问题标题】:SwiftUI - "Type of Expression is ambiguous without more context" on Text() callSwiftUI - Text() 调用中的“表达式类型不明确,没有更多上下文”
【发布时间】:2019-12-05 12:00:31
【问题描述】:

我目前正在尝试使用导航链接将一组值传递到详细视图中。但是,每当我尝试传递数组时,我指定用于显示导航链接的文本函数调用都会给我“表达式类型不明确而没有更多上下文”错误。当我传递简单的单个值时,这不是问题,但我需要能够在详细视图中显示数组中的每个元素。

struct Item: Identifiable{
           let id=UUID()
           let name:String
    }

    struct Group: Identifiable{
            let id:Int
            let thing:String
            let items:[Item]
    }

    //the "Item" objects are currently placeholders.
    var groups = [
        Group(id: 0,
              thing:"Tops",
              items:[Item(name:"first"), Item(name:"second"), Item(name:"third")]),
        Group(id: 2,
              thing:"Jeans",
              items:[Item(name:"first"), Item(name:"second"), Item(name:"third")]),
        Group(id: 3,
              thing:"Skirts",
              items:[Item(name:"first"), Item(name:"second"), Item(name:"third")]),
        Group(id: 4,
              thing:"Shoes",
              items:[Item(name:"first"), Item(name:"second"), Item(name:"third")]),
        Group(id: 5,
              thing:"Pajamas",
              items:[Item(name:"first"), Item(name:"second"), Item(name:"third")]),
        Group(id: 6,
              thing:"Jackets",
              items:[Item(name:"first"), Item(name:"second"), Item(name:"third")]),
        Group(id: 7,
              thing:"Hats",
              items:[Item(name:"first"), Item(name:"second"), Item(name:"third")]),
        Group(id: 8,
              thing:"Jewelry",
              items:[Item(name:"first"), Item(name:"second"), Item(name:"third")])
    ]

var body: some View {
        List(groups){ group in
            NavigationLink(destination : ClosetDetailView(items: group.items)){
                        //location of error
                        Text(group.thing)
                }
            }
        .background(Color.pinkish)
        .navigationBarTitle("Categories")
        }
}

struct PlaceholderView:View {
    var body:some View{
        Text("placeholder")
    }
}

struct ClosetDetailView:View {
    struct Item: Identifiable{
              let id=UUID()
              let name:String
    }

    var items:[Item]

    var body : some View{
        List(items){ item in
            HStack{
                Text(item.name)
            }
        }
    }
}

【问题讨论】:

    标签: arrays swiftui navigationlink


    【解决方案1】:

    首先,要启用到详细视图的导航,您应该将列表嵌入到 NavigationView 中:

    struct ContentView: View {
        var body: some View {
            NavigationView {
                List(groups) { group in
                    NavigationLink(destination: ClosetDetailView(items: group.items)) {
                        Text(group.thing)
                        .listRowBackground(Color.red)
                    }
                }
                .navigationBarTitle("Categories")
            }
    
        }
    }
    

    如果在将参数传递给函数时出现错误,我们通常会收到错误“表达式类型不明确,没有更多上下文”。在这种情况下,您的壁橱详细信息视图需要一个 Item 数组。问题是您在 ClosetDetailView 内部和外部定义了一个 Item Struct。将项目传递给 ClosetDetailView 时出现此错误可能会导致整个 NavigationLink 出现错误。删除 ClosetDetailView 中的 Struct,错误消失:

    struct ClosetDetailView:View {
        var items:[Item]
    
        var body : some View{
            List(items){ item in
                HStack{
                    Text(item.name)
                }
            }
        }
    }
    

    【讨论】:

    • 导航视图处于更顶级的视图中,这只是一个子视图。对不起,应该澄清一下。此外,这个解决方案只是将错误向上移动到实际的 ClosetDetailView 调用本身。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多