1.第一種
實(shí)現(xiàn)
+ (void)getGoodsDetailDataWithGhseq:(NSString *)ghseq
oldCode:(NSString *)oldCode
dataTableView:(UITableView *)dataTableView
completion:(void (^)(XYGoodsInfo * xYGoodsInfo))completion{
//當(dāng)block當(dāng)作參數(shù)的類型定義的時(shí)候褒繁,不能寫block名恩尾,只能寫成(^) 暫時(shí)不知道是什么原因
傳值
dispatch_async(dispatch_get_main_queue(), ^{
completion(goodsinfo);
});
這種寫法的優(yōu)點(diǎn)是簡潔,當(dāng)然上面是針對(duì)網(wǎng)絡(luò)請(qǐng)求的抛寝,一般的話弯蚜,也可以這樣寫惕鼓,拿UIViewController舉個(gè)例子蟆肆,
1.1 h文件
#import <UIKit/UIKit.h>
@interface TwoViewController : UIViewController
- (instancetype)initCompletion:(void(^)(NSString *test))testBlock;
@end
1.2 m文件
1.3調(diào)用
2.另一種(其實(shí)也大同小異)
2.1 以方法的方式
先聲明
typedef void(^SearchTouchBlock)(NSString *title);
聲明屬性持有
@property (nonatomic, copy) SearchTouchBlock searchTouchBlock;
方法對(duì)外
-(void)didTouchTheSearchBtn:(SearchTouchBlock)Block;
block傳值
-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
self.searchTouchBlock(self.searchTitle);
}
調(diào)用取值
[self.HeaderView didTouchTheSearchBtn:^(NSString *title) {
wself.tableview.mj_footer.state = MJRefreshStatePulling;
wself.isTouchSearch = YES;
wself.pageNum = 1;
wself.keyWord = title;
[wself requestListData];
}];
這種寫法就是強(qiáng)大靈活,但是寫法麻煩
2.2當(dāng)然也有以屬性的方式
2.2.1
h文件
#import <UIKit/UIKit.h>
//這樣的話掉奄,h文件會(huì)多一點(diǎn)规个,因?yàn)橐獙?duì)外
typedef void(^testBlock)(NSString*test);
@interface TwoViewController : UIViewController
@property (nonatomic, copy) testBlock littleBlock;
@end
2.2.2 m文件
- (IBAction)clickTestButton:(id)sender {
if(_littleBlock != nil) {
_littleBlock(@"memeda");
}
[self.navigationController popViewControllerAnimated:YES];
}
2.2.3 調(diào)用
- (IBAction)clickBtn:(id)sender {
TwoViewController *vc = [TwoViewController new ];
vc.littleBlock = ^(NSString *test) {
NSLog(@"----%@",test);
};
[self.navigationController pushViewController:vc animated:YES];
}