这里是Objective-C的代码块:
@property (copy) void (^anObjcBlock)();
anObjcBlock = ^{
NSLog(@"Yea man this thing works!!");
};
NSMutableArray *theArrayThatHasTheBlockInItAtIndexZero = [NSMutableArray array];
[theArrayThatHasTheBlockInItAtIndexZero addObject:anObjBlock];
这是我在Swift中所做的:
var theBlock: (()->Void)?
theBlock = theArrayThatHasTheBlockInItAtIndexZero[0] as? ()->Void
// Now call the block
theBlock!()
但是我遇到了运行时错误。
基本上,
theBlock = theArrayThatHasTheBlockInItAtIndexZero[0] as? ()->Void
语句会使theBlock
为空,因为as?
失败了。当我将该语句更改为theBlock = theArrayThatHasTheBlockInItAtIndexZero[0] as! ()->Void
时,我会得到一个运行时错误:![enter image description here](https://istack.dev59.com/Uq9du.webp)
var block : (@convention(block) () -> Void)?
。(Swift 2.0 - 对于 Swift 1.x,请使用@objc_block
而不是@convention(block
)。 - Matteo Pacini