概要
NSObjectのカテゴリとして、「自分自身を引数にもつ」ブロックを呼び出すメソッドを作成しました。そのスコープ内では対象となるオブジェクトに好きな名前をつけられるので、特にUI関係のコードなどを非常に綺麗に書けるようになります。
説明よりも、下記サンプルを見るのが一番手っ取り早いです。
サンプルコード
通常の書き方
self.longNameLabel.text = @"test";
self.longNameLabel.font = [UIFont systemFontOfSize:15];
self.longNameLabel.textAlignment = NSTextAlignmentCenter;
self.longNameLabel.numberOfLines = 3;
###普通にスコープを使う場合
新しく宣言した変数はスコープから出る時に消滅しますが、元々ある変数を自由に変更することが出来ます。
{
UILabel *l = self.longNameLabel;
l.text = @"test";
l.font = [UIFont systemFontOfSize:15];
l.textAlignment = NSTextAlignmentCenter;
l.numberOfLines = 3;
}
###スコープブロックを使う書き方
スコープ内では、__block宣言されていない変数は変更できません。
[self.longNameLabel btk_scope:^(UILabel *l) {
l.text = @"test";
l.font = [UIFont systemFontOfSize:15];
l.textAlignment = NSTextAlignmentCenter;
l.numberOfLines = 3;
}];
ソース
NSObject+BTKUtils.h
//
// NSObject+BTKUtils.h
// BTKCommons
//
// Created by Tomohisa Ota on 3/20/14.
//
//
#import <Foundation/Foundation.h>
@interface NSObject (BTKUtils)
- (instancetype) btk_scope:(void (^)(id obj))scopedBlock;
@end
NSObject+BTKUtils.m
//
// NSObject+BTKUtils.m
// BTKCommons
//
// Created by Tomohisa Ota on 3/20/14.
//
//
#import "NSObject+BTKUtils.h"
@implementation NSObject (BTKUtils)
- (instancetype) btk_scope:(void (^)(id obj))scopedBlock
{
if(scopedBlock){
scopedBlock(self);
}
return self;
}
@end