我创建了一个通用函数来检查排序描述符的有效性:
func _areValid(sortDescriptors: [NSSortDescriptor], of type: Object.Type) -> Bool {
var inputKeys: Set<String> = []
sortDescriptors.forEach { if let key = $0.key { inputKeys.insert(key) } }
if inputKeys.isSubset(of: Set(type.entity().attributesByName.keys)) { return true }
else { return false }
}
它允许验证NSSortDescriptor中的密钥确实是实体密钥。问题是密钥可以存在,但可能不合格。例如,UUID。我怎么检查呢?谢谢。
答案 0 :(得分:1)
我认为您必须检查每个属性的attributeType
字段,并且只允许特定类型。我不知道从属性类型到可排序性检查,而不仅列出允许的类型。
对于UUID属性,属性类型为UUIDAttributeType
。这对应于UUID
类型的属性。但是,UUIDAttributeType
或UUID
结构定义并没有明确说明这一点。它只出现在文档中。您可以查找属性类型,但没有内置方法来检查某些属性类型值是否与您可以在排序描述符中使用的内容相对应。
在您查找attributesByName
的某个时刻,您需要查看每个属性并返回false
UUIAttributeType
以及其他任何您不知道的内容想要允许。它并不理想,但我认为这是唯一的方法。
另外,我非常有兴趣知道你正在做什么,这使得这项检查成为必要。