iOS
Block

blockでコールバックを書く

More than 5 years have passed since last update.

いい加減、delegateばっかだと、あっちこっち読むのが大変なので書いてみた

まず、呼び出される側から。



BlockSample.h

#import <Foundation/Foundation.h>


typedef void (^BlockSampleCallBack)(NSArray *foo);

@interface BlockSample : NSObject
- (void)hoge:(NSString *)fuga callback:(BlockSampleCallBack)callback;
@end


typedefで定義してするほうが可読にいいよねってことらしい。



BlockSample.m

#import "BlockSample.h"


@implementation BlockSample

- (void)hoge:(NSString *)fuga callback:(BlockSampleCallBack)callback
{
NSArray *array = @[@"りんご", @"ごりら", @"らぶらぶ"];
if (callback) {
callback(array);
}
}

@end


このhogeメソッドの呼び出し側で、callbackにnilを入れる事もあると思うので、

落ちないように対策はしておこう。

下記に詳しく書いてあるよ

cf.Block引数の安全な呼び出し方(tomohisaota)




次に呼び出し側を書く。


CalledBlockSample.m


// いろいろと割愛

- (void)moDMP
{
// BlockSampleがシングルトンだったとして...
[[BlockSample] sharedManager] hoge:@"これはテストだ" callback:^(NSArray *foo) {
NSLog(@"アホな配列がやってくるお %@", foo);
}];

// って書く人もいるけど
[[BlockSample] sharedManager] hoge:@"これはテストだ" callback:^(NSArray *foo) {}];

// 僕はnilを入れるので、BlockSample.m内でcallbackを使う際にnil対策したった
[[BlockSample] sharedManager] hoge:@"これはテストだ" callback:nil];

}

// いろいろと割愛





これで忘れないかな。