2012-07-12 47 views
5

需要幫助聲明和實現帶有塊但不帶參數的方法。 聽起來很簡單,但我失去了一些東西,因爲這個工程:聲明並實現帶塊的iOS方法,但不包含其他參數

- (void) RetrieveDevices: (NSInteger)count 
     success:(void (^)(NSMutableArray *devices))success 
     failure:(void (^)(aylaError *err))failure; 

- (void)RetrieveDevices:(NSInteger)count 
     success:(void (^)(NSMutableArray *devices))successBlock 
     failure:(void (^)(aylaError *err))failureBlock 
{ 

} 

而且因爲它是期待一個方法體,這將不能編譯:

- (void) RetrieveDevices 
      success:(void (^)(NSMutableArray *devices))success 
      failure:(void (^)(aylaError *err))failure; 

- (void)RetrieveDevices 
      success:(void (^)(NSMutableArray *devices))successBlock 
      failure:(void (^)(aylaError *err))failureBlock 
{ 

} 

欣賞的幫助。

+2

方法名稱應該以小寫字母開頭.... – bbum 2012-07-12 23:12:40

回答

12

塊是參數。所以你需要一個帶兩個參數的方法簽名。 嘗試例如爲:

- (void) RetrieveDevicesWithSuccess:(void (^)(NSMutableArray *devices))success 
          failure:(void (^)(aylaError *err))failure; 
+0

非常感謝。這確實按預期工作 – Dan 2012-07-12 23:08:19

+0

如果我想將成功和失敗結合到一個完成塊中,該怎麼辦? – 2013-11-19 15:13:17

1

的問題是「RetrieveDevices」和「成功」 /「失敗」之間的換行和空白。試試這個:

- (void)RetrieveDevicesOnSuccess:(void (^)(NSMutableArray *devices))successBlock 
         onFailure:(void (^)(aylaError *err))failureBlock 
{ 

} 
0

你可以這樣做:

- (void) RetrieveDevicesSuccess:(void (^)(NSMutableArray *devices))success 
         failure:(void (^)(aylaError *err))failure; 
0

的問題是不是塊的語法,這是第二個例子中的方法聲明的語法。 不帶參數的方法被聲明爲:

- (RETURN_TYPE)method_name 

,並用參數的方法被聲明爲:

- (RETURN_TYPE)method_name_part1:(PARAMETER_TYPE1)parameter1 name_part2:(PARAMETER_TYPE2)parameter2... 

第一個例子具有正確的語法,用void返回類型,和三個參數,第二個例子在方法名後面有一個空格,這就是編譯器期望方法的主體(他將其解釋爲無參數方法)的原因。

另請注意,按照慣例,方法名稱以小寫字母開頭。

相關問題