如何为可选属性创建一列表格?在我的模型中,我是否需要将其解包以使其成为空字符串(如果它是“nil”)?
关键路径的值类型“String?”无法转换为上下文类型“String”。
extension SomeObject {
var someOptionalStringUnwrapped: String { return someOptionalString ?? "" }
}
Table(someObject) {
TableColumn("One", value: \.someString)
TableColumn("Two", value: \.someOptionalString) // <--shows error mentioned below
TableColumn("Three", value: \.someOptionalStringUnwrapped) // <--compiles
}
关键路径的值类型“String?”无法转换为上下文类型“String”。
解决方案
对于简单的属性,如字符串和数字,取消包装策略似乎是解决此问题的最简单方法(可以使用通用扩展,如答案中所述,也可以针对每个属性进行设置,如问题中所述)。对于更复杂的用户界面,我们始终可以退而求其次,采用自定义UI:
TableColumn("DEMO") { someObject in
...
Text("\(someObject.someValue)")
...
}