【发布时间】:2015-09-25 06:46:19
【问题描述】:
这是 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 时,出现运行时错误:
我不知道还能做什么。这是一个空项目,里面真的没有代码。
【问题讨论】:
-
你能试着用括号括住你的块定义吗? var theBlock: (()->Void)?
-
是的,对不起。我已经把它放在括号里了。我编辑了问题
-
Ty 将块类型设置为
var block : (@convention(block) () -> Void)?。 (Swift 2.0 - 对于 Swift 1.x 使用@objc_block而不是@convention(block) -
@MatteoPacini 这对我不起作用。它对你有用吗?
-
@Jai 不,不幸的是。这是一个很奇怪的错误。我会做更多的测试然后回来。
标签: objective-c swift cocoa cocoa-touch objective-c-blocks