Swift 5:如何制作包含类类型的集合(用于NSXPCInterface)

时间:2019-05-06 19:57:40

标签: swift hashable

NSXPCInterface.setClasses(_:for:argumentIndex:ofReply:)的{​​{3}}中,对于Swift,第一个参数描述为:

包含Class对象的NSSet,例如[MyObject class]

嗯,似乎有人忽略了将其从Objective-C更新到Swift。对于斯威夫特,我认为应该像

包含类类型的集合

(有人请纠正我的措辞。)但是如何创建一个包含类类型的Set?编译器不允许我声明一个成员类型不是Set的对象符合Hashable。这是有道理的,因为需要哈希来保持成员之间的唯一性。但是Swift中的Class Types似乎不是可哈希的。在任何Swift文件或游乐场中尝试……

class Foo {}
let mySet: Set<AnyHashable>
mySet.insert(Foo)

编译器抱怨:

参数类型“ Foo.Type”与预期的类型“哈希”不符

或者,更广泛地说,有人知道如何在Swift 5中使用NSXPCInterface.setClasses(_:for:argumentIndex:ofReply:)吗?

1 个答案:

答案 0 :(得分:2)

您传递的类必须是@objc类(以及NSObject的子类)。您将它们放入NSSet中,然后将其强制转换为Set:

let classSet = NSSet(object: Foo.self) as! Set<AnyHashable>

这几乎可以肯定是NSXPCInterface中的一个错误(它需要某种“为Swift细化”或可能是垫片),我建议在bugreport.apple.com上打开一个缺陷。