我广泛使用KVC来构建应用程序需要的统一接口。例如,我的一个函数会获取一个对象,该对象仅基于字符串键的字典进行多次检查。
因此,我需要一种方法来检查按键排序的对象是否为集合类型。
我原本期望能够进行一些协议检查(例如在C#中的IEnumerable检查是否可枚举),但这并没有成功:
if let refCollection = kvcEntity.value(forKey: refListLocalKey) as? AnySequence<CKEntity> { ... }
我也尝试了AnyCollection。
我知道只需输入以下命令就可以遍历所有主要集合类型:
if let a = b as? Set { ...} // (or: if a is Set {...})
if let a = b as? Array { ...}
if let a = b as? Dictionary { ...}
但从继承/多态的角度来看,这似乎不太合适。
Collection
中不起作用,会导致错误。 - rmaddy