我试图使用这个方法:class_addMethod()在Obj-c中使用像这样:
class_addMethod([self class],@selector(eventHandler),imp_implementationWithBlock(handler),"v@:");
而且我在Swift中使用它:
class_addMethod(NSClassFromString("UIBarButtonItem"),"handler","v@:")
它是UIBarButtonItem的扩展,因为你可能已经想到了.
imp_implementationWithBlock采用AnyObject类型的参数!
如何将() – >()转换为AnyObject?
我试图将它转换为:处理程序为AnyObject,但它给我一个错误说:() – >()不符合协议’AnyObject’
解决方法
How can I cast
()->()
intoAnyObject
?
警告:此回答包括Swift中的无证件和不安全功能.我怀疑这通过AppStore审查.
let f: ()->() = { println("test") } let imp = imp_implementationWithBlock( unsafeBitCast( f as @objc_block ()->(),AnyObject.self ) )