在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:)
吗?
答案 0 :(得分:2)
您传递的类必须是@objc类(以及NSObject的子类)。您将它们放入NSSet中,然后将其强制转换为Set:
let classSet = NSSet(object: Foo.self) as! Set<AnyHashable>
这几乎可以肯定是NSXPCInterface中的一个错误(它需要某种“为Swift细化”或可能是垫片),我建议在bugreport.apple.com上打开一个缺陷。