I have this sample code:
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)
}
}
}
I get the following error:
Key path value type 'String?' cannot be converted to contextual type 'String'
I can solve using \.name!
, but I'd like to give a default value instead (something like \.name ?? "default"
).
How can I achieve this?
There is a TableColumn
init that lets you create the content in a closure
var body: some View {
Table(items) {
TableColumn("Name") { item in
Text(item.name ?? "default")
}
}
}
or solve it with a wrapped property
extension Item {
var itemName: String {
name ?? "default"
}
}
In the view
var body: some View {
Table(items) {
TableColumn("Name", value: \.itemName)
}
}