2015-09-04 16 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);