【发布时间】:2017-05-05 07:08:35
【问题描述】:
我广泛使用 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 { ...}
但从继承/多态的角度来看,这似乎并不合适。
【问题讨论】:
-
我在发帖前使用了搜索。从 isKindOfClass 开始,它意味着对硬编码类型的迭代。我想要一个适当的协议检查或类似的东西。
-
@AnniS 这不适用于
Collection。这会导致错误。 -
@AnniS,conformsToProtocol 来自 objc,仅适用于 NSObject 派生的类型。 Swift 集合不是。
标签: swift generics collections