在iOS開發(fā)中,閉包也就是Block是一種常用的特殊類型,可以正常定義變量试和、作為參數(shù)饼问、作為返回值,還可以聲明賦值去保存一段代碼,在需要調(diào)用的地方去調(diào)用讲坎,目前Block已經(jīng)廣泛應(yīng)用于各類回調(diào)傳值星岗、排序遍歷牍白、GCD益兄、動畫等锻梳。
下面,介紹一種比較冷門的使用閉包來進行初始化的例子净捅,好處是在需要生成多個相同實例的時候會比較方便疑枯,代碼上看著也比較整齊和清晰。
傳統(tǒng)寫法:
UILabel *titleLabel = [[UILabel alloc] init];
titleLabel.font = [UIFont systemFontOfSize:17 weight:UIFontWeightRegular];
titleLabel.textColor = [UIColor blackColor];
titleLabel.textAlignment = NSTextAlignmentCenter;
titleLabel.frame = CGRectMake(15, 15, 200, 30);
titleLabel.text = @"我是標(biāo)題";
[self.view addSubview:titleLabel];
UILabel *textLabel = [[UILabel alloc] init];
textLabel.font = [UIFont systemFontOfSize:15 weight:UIFontWeightRegular];
textLabel.textColor = [UIColor blackColor];
textLabel.textAlignment = NSTextAlignmentCenter;
textLabel.frame = CGRectMake(15, 60, 200, 30);
textLabel.text = @"我是文本";
[self.view addSubview:textLabel];
閉包寫法:
UILabel *titleLabel = ^{
UILabel *label = [[UILabel alloc] init];
label.font = [UIFont systemFontOfSize:17 weight:UIFontWeightRegular];
label.textColor = [UIColor blackColor];
label.textAlignment = NSTextAlignmentCenter;
label.frame = CGRectMake(15, 15, 200, 30);
label.text = @"我是標(biāo)題";
return label;
}();
[self.view addSubview:titleLabel];
UILabel *textLabel = ^{
UILabel *label = [[UILabel alloc] init];
label.font = [UIFont systemFontOfSize:15 weight:UIFontWeightRegular];
label.textColor = [UIColor blackColor];
label.textAlignment = NSTextAlignmentCenter;
label.frame = CGRectMake(15, 60, 200, 30);
label.text = @"我是文本";
return label;
}();
[self.view addSubview:textLabel];
或者:
UILabel *(^newLabel)(NSString*, CGFloat) = ^(NSString *text, CGFloat fontSize) {
UILabel *label = [[UILabel alloc] init];
label.font = [UIFont systemFontOfSize:fontSize weight:UIFontWeightRegular];
label.textColor = [UIColor blackColor];
label.textAlignment = NSTextAlignmentCenter;
label.text = text;
return label;
};
UILabel *titleLabel = newLabel(@"我是標(biāo)題", 17);
titleLabel.frame = CGRectMake(15, 15, 200, 30);
[self.view addSubview:titleLabel];
UILabel *textLabel = newLabel(@"我是文本", 15);
textLabel.frame = CGRectMake(15, 60, 200, 30);
[self.view addSubview:textLabel];