2015-09-04 150 views
0

下面是我在Objective-C我定义块类型Swift中的Objective-C块 - 可变缺失?

typedef void (^arrayBlock)(NSArray *blockArray); 

我有一个使用这个作为返回块

-(void)loadTimesWithSuccessBlock:(arrayBlock)successBlock; 

当我尝试使用方法的Objective-C类这个方法在Swift中,这是自动完成给我的。

let timeClockLibrarian = HMFTimeClockLibrarian() 
timeClockLibrarian.loadTimesWithSuccessBlock { ([AnyObject]!) -> Void in 
    //Where is blockArray?   
} 

我假设[AnyObject]!应该是NSArray。但我不明白我应该如何访问该变量?

如果我是Objective-C的使用这个方法我得到的结果是这样的:

[timeClockLibrarian loadTimesWithSuccessBlock:^(NSArray *blockArray) { 
     //I can use the blockArray here :) 
}]; 

回答

1

[AnyObject]!的确只有变量的类型;自动完成未命名。你只需要做点像(blockArray: [AnyObject]!)

let timeClockLibrarian = HMFTimeClockLibrarian() 
timeClockLibrarian.loadTimesWithSuccessBlock { (blockArray: [AnyObject]!) -> Void in 
    // your code here 
} 
+0

这就是我的想法。当我尝试使用{self.logEntries = blockArray}将一个blockArray分配给一个局部变量,例如{var logEntries = [LogEntry()}时,它告诉我“不能用'(([AnyObject]')类型的参数列表调用'loadTimesWithSuccessBlock'! ) - > Void)'“ – Hackmodford

+0

这是因为数组是无类型的,分配失败。根据你使用Xcode 6还是Xcode 7 beta,你有不同的选择。 – zneak

+0

我正在使用Xcode 6 – Hackmodford

0

这样写:

let timeClockLibrarian = HMFTimeClockLibrarian() 
timeClockLibrarian.loadTimesWithSuccessBlock { blockArray in 
    doSomething(blockArray) 
} 

如果你想引用弱自用这样的:

let timeClockLibrarian = HMFTimeClockLibrarian() 
timeClockLibrarian.loadTimesWithSuccessBlock { [weak self] blockArray in 
    self?.doSomething(blockArray) 
} 

你也可以想摆脱隐含解缠的。如果是这样的话,请在Obj-C代码中指定可空性:

typedef void (^arrayBlock)(nullable NSArray *blockArray);