在Apple 文档中NSXPCInterface.setClasses(_:for:argumentIndex:ofReply:),对于 Swift,第一个参数描述为:
包含 Class 对象 \xe2\x80\x94 的 NSSet,例如 [MyObject class]。
\n\n嗯,看起来好像有人忽略了将其从 Objective-C 更新到 Swift。对于 Swift 我认为它应该是这样的
\n\n包含类类型的集合
\n\n(请有人纠正我的措辞。)但是如何制作包含类类型的 Set 呢? 编译器不允许我声明Set其成员类型不符合的成员Hashable。这是有道理的,因为需要哈希来保持成员之间的唯一性。但 Swift 中的类类型似乎不可散列。在任何 Swift 文件或游乐场\xe2\x80\xa6 中尝试此操作
class Foo {}\nlet mySet: Set<AnyHashable>\nmySet.insert(Foo)\nRun Code Online (Sandbox Code Playgroud)\n\n编译器抱怨:
\n\n参数类型“Foo.Type”不符合预期类型“Hashable”
\n\n或者,更广泛地说,有人知道如何NSXPCInterface.setClasses(_:for:argumentIndex:ofReply:)在 Swift 5 中使用吗?
您传递的类必须是 @objc 类(以及 NSObject 的子类)。您将把它们放入 NSSet 中,然后将其转换为 Set:
let classSet = NSSet(object: Foo.self) as! Set<AnyHashable>
Run Code Online (Sandbox Code Playgroud)
这几乎肯定是 NSXPCInterface 中的一个错误(它需要某种“针对 Swift 的优化”或可能是垫片),我建议在 bugreport.apple.com 上打开一个缺陷。
| 归档时间: |
|
| 查看次数: |
970 次 |
| 最近记录: |