我有一个Core Data实体,它有四个布尔非可选属性,默认为NO。类初始化时获取实体对象,因此这不是NSFetchResquest的结果,并且这四个属性中的一个将设置为YES。 该类需要知道哪个属性为YES。
当然,我可以使用嵌套的IF / Else语句(或三元组)来找出哪个属性是YES,但我想知道是否有更好的(意味着更多cocoa-ish)方式来查看实体和说'你的房产中有一个布尔值是吗?'。
另外,我可以改造以使布尔值没有默认值,并且只查找具有YES的布尔值,但这似乎是同样的问题。
答案 0 :(得分:0)
有几种不同的可能性。使用四种不同的布尔属性是一个干净的解决方案。然后,您必须使用if ... elsif语句来查明发生的情况。
更多的C方法是定义可以OR在一起并存储为NSUInteger的位掩码。如果这在语义上有意义,你可以将它们组合在一个枚举中,但这就是C方式。
您还可以定义NSManagedObject
的自定义子类,并编写一些便捷方法来检查这些选项。取决于他们有什么好处。
答案 1 :(得分:0)
您可以使用反射(例如class_copyPropertyList
和class_getProperty
)来检查类具有哪些属性,并检查它们的值,但是当您已经知道哪四个属性时,这是一种非常严厉的方法是相关的。我不会建议这种方法,我不会把它称为Cocoa-ish,只是更抽象。
如果您正在查看特定的状态组合,我认为GorillaPatch的建议是正确的:您可以将这四个布尔值转换为单个4位整数,并将其与代表您感兴趣的各种组合的位掩码进行比较。