如何为 Table 中的 Table 列提供默认值

How to give default value to TableColumn in Table

我有这个示例代码:

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)
        }
    }
}

我收到以下错误:

Key path value type 'String?' cannot be converted to contextual type 'String'

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

我怎样才能做到这一点?

有一个 TableColumn init 可以让您在闭包中创建内容

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)
    }
}