GTDItemEntity是核心数据实体。我需要能够将“无”或“无项目”作为有效值。我可以使用.value和.displayValueFor做到这一点。但是如何在选项中允许它?
<<< AlertRow<GTDItemEntity>() {
$0.title = "Project"
$0.value = self.item?.project
$0.displayValueFor = { project in
return project?.text ?? "No Project"
}
$0.options = [nil] // sample one option with nil value
$0.onChange() {
self.item.project = $0.value
}
}
答案 0 :(得分:1)
一种方法是更改为AlertRow<GTDItemEntity?>
:
<<< AlertRow<GTDItemEntity>() {
$0.title = "Project"
$0.value = self.item?.project
$0.displayValueFor = { project in
return project??.text ?? "No Project" // *
}
$0.options = [nil] // sample one option with nil value
$0.onChange() {
self.item.project = $0.value ?? nil // *
}
}
请注意,这使$0.value
具有双重可选性,这就是为什么我在标有*
的行中更改了一些代码的原因。
执行此操作的另一种方法是添加特殊的GTDItemEntity
作为选项之一。您应为该特殊GTDItemEntity
的某个字段分配一个值,以使其他GTDItemEntity
都没有该值。然后,您可以检查行的值是否已更改为onChange
中的特殊实体。如果是这样,请将值设置为nil。