標籤:寫法 import 類型 nsstring 它的 self man ogr interface
一、介紹
鏈式編程是一個比較新穎的編程方式,簡單直觀,用起來也比較舒服。目前比較有名的Mansory和BabyBlueTooth就是使用鏈式編程寫的第三方架構。
二、寫法
鏈式編程寫法不同於傳統方式,初次寫起來比較彆扭,但是一旦習慣了,用起來比較得心應手。那麼,如何寫呢?其實就是一個對象調用它的執行個體方法後返回一個block(已經定義過),而這個block內部又返回該對象。依此類推,該對象不論調用多少個它的執行個體方法,最終都會返回該對象本身。
三、執行個體
LearnManager類定義和實現
//// LearnManager.h// ChainProgramming//// Created by 夏遠全 on 2017/9/30.// Copyright ? 2017年 夏遠全. All rights reserved.#import <Foundation/Foundation.h>/** 定義block,傳回值類型是LearnManager對象 */@class LearnManager;typedef LearnManager *(^LearnChineseBlock)(NSString *chineseName);typedef LearnManager *(^LearnEnglishBlock)(NSString *englishName);typedef LearnManager *(^LearnFranchBlock) (NSString *franchName);@interface LearnManager : NSObject/** 定義對象方法 @return 傳回值是定義過的block */-(LearnChineseBlock)learnChinese;-(LearnEnglishBlock)learnEnglish;-(LearnFranchBlock)learnFranch;@end
//// LearnManager.m// ChainProgramming// Created by 夏遠全 on 2017/9/30.// Copyright ? 2017年 夏遠全. All rights reserved.#import "LearnManager.h"@implementation LearnManager-(LearnChineseBlock)learnChinese{ //外部返回一個block return ^LearnManager *(NSString *chineseName){ NSLog(@"%@", [NSString stringWithFormat:@"學習%@!",chineseName]); //內部block返回一個LearnManager對象 return self; };}-(LearnEnglishBlock)learnEnglish{ //外部返回一個block return ^LearnManager *(NSString *englishName){ NSLog(@"%@", [NSString stringWithFormat:@"學習%@!",englishName]); //內部block返回一個LearnManager對象 return self; };}-(LearnFranchBlock)learnFranch{ //外部返回一個block return ^LearnManager *(NSString *franchName){ NSLog(@"%@", [NSString stringWithFormat:@"學習%@!",franchName]); //內部block返回一個LearnManager對象 return self; };}@end
ViewController類匯入並調用
//// ViewController.m// ChainProgramming//// Created by 夏遠全 on 2017/9/30.// Copyright ? 2017年 夏遠全. All rights reserved.//#import "ViewController.h"#import "LearnManager.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; LearnManager *learn = [[LearnManager alloc] init];
//learn對象首先調用方法返回一個block,然後給block傳入字串參數並調用,於是又返回了該對象learn本身 learn.learnChinese(@"語文").learnEnglish(@"英語").learnFranch(@"法語");}@end
四、列印
2017-09-30 18:41:10.288 ChainProgramming[92884:3768713] 學習語文!2017-09-30 18:41:10.288 ChainProgramming[92884:3768713] 學習英語!2017-09-30 18:41:10.289 ChainProgramming[92884:3768713] 學習法語!
iOS:用Block寫一個鏈式編程