-1

我有这个示例代码:

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

struct ItemTable: View {
    
    let items: [Item]
    
    var body: some View {
        Table(items) {
            TableColumn("Name", value: \.name)
        }
    }
}

我收到以下错误:

键路径值类型“字符串?” 无法转换为上下文类型“字符串”

我可以使用 解决\.name!,但我想改为提供默认值(类似于\.name ?? "default")。

我怎样才能做到这一点?

4

1 回答 1

1

有一个TableColumninit 可让您在闭包中创建内容

var body: some View {
    Table(items) {
        TableColumn("Name") { item in
             Text(item.name ?? "default")
        }
    }
}

或用包装的属性解决它

extension Item {
    var itemName: String {
        name ?? "default"
    }
}

在视图中

var body: some View {
    Table(items) {
        TableColumn("Name", value: \.itemName)
    }
}
于 2021-06-11T09:47:29.537 回答