简言之:如何在Swift中的Set
或Array
上设置协议约束?
众所周知,您不能使Set
由协议类型组成,因为协议本身不能遵守Hashable
方法。
但是,如果所有采用某种协议的类也从NSObject
这样的基类继承,那么应该可以使Set
由遵守所述协议的几个类组成,因为{{ 1}}采用先决条件NSObject
协议。
尽管如此,我甚至无法找到如何使用基类和协议约束生成普通Hashable
。
添加通用约束,例如
Array
只会产生let array:Array<T: NSObject where T: NSObjectProtocol>
。
Expected '>' to complete generic argument list
导致同样的错误以及let set = Set<NSObject:NSObjectProtocol>()
。
Expected expression
结果为let set = Set<NSObject, NSObjectProtocol>()
。