Objective-C Swift 中的块 - 缺少变量?

Objective-C Block in Swift - Variable Missing?

这是我在 objective-c

中定义的块类型
typedef void (^arrayBlock)(NSArray *blockArray);

我有一个 objective-c class 的方法,将其用作 return 块

-(void)loadTimesWithSuccessBlock:(arrayBlock)successBlock;

当我尝试在 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 :)
}];

[AnyObject]!确实只是变量的类型;自动完成没有命名它。你只需要做类似 (blockArray: [AnyObject]!).

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

这样写:

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

如果你想引用 weak self 使用这个:

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

您可能还想摆脱隐式展开。如果是这样,请在 Obj-C 代码中指定可空性:

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