给定 a KeyPath<Root, Value>
,是否有一种干净的方法来测试是否Value.self
是 a Set
?对于 Core Data,我想指定一个接受 的 API KeyPath<Root, Value>
,并且可以使用它来确定它是否是toMany
关系。到目前为止,我最好的尝试是指定一个协议:
extension CollectionQueryable {
var isToMany: Bool {
return false
}
}
然后,让所有KeyPath
s 符合它:
extension KeyPath: CollectionQueryable { }
然后有条件地返回true
有效的两种情况:NSOrderedSet
和Set
。
extension KeyPath where Value == NSOrderedSet {
var isToMany: Bool {
return true
}
}
extension KeyPath where Value: Set {
var isToMany: Bool {
return true
}
}
但是编译器抱怨我没有指定Set
这里的泛型类型。如果我将它切换到Collection
,编译器会很高兴,但这不起作用,因为它返回true
when Value
is aString
在这种情况下是非常错误的。