swift - 如何通过 swift 初始化一个值为 block 的 NSMapTable

标签 swift closures block

当我使用NSMapTable时,一个麻烦让我不开心,我这样做了

[self.map setObject:block forKey:key]

在 obj-c 中是可以的,但是当我这样做的时候

map.setObject(block as!AnyObject, forKey: key)

在 Swift 中,我得到一个错误

Could not cast value of type '() -> ()' (0x15d9a604) to 'Swift.AnyObject' (0x15d7335c)

在使用 NSMapTable 时如何修复它?我不想使用 Dictionay ,因为 key 很复杂。

最佳答案

block 不是对象。将您的 block 包装在一个类中,然后将您的 block 作为属性分配给该类。

class MyClass {
   let block: Void -> Void
}

[self.map setObject:myClass forKey:key]

关于swift - 如何通过 swift 初始化一个值为 block 的 NSMapTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31289421/

相关文章:

Javascript - setTimeout 关闭问题

Javascript闭包-有何负面影响?

Ruby: block 和产量

c - 这个 C 代码块如何解析为整数赋值?

ruby - 产生多个参数的链接枚举器

swift - 具有特定标识符的 CoreBluetooth 扫描外设

ios - 从函数外部更改 UILabel 的文本

swift - 在协议(protocol)扩展中是否可以默认实现 get-set 变量?

ios - 如何在 Swift 中使用共享容器/应用程序组从其他目标访问文件

javascript - 是否有可能访问函数的闭包?