• iOS:用Block写一个链式编程


    一、介绍

      链式编程是一个比较新颖的编程方式,简单直观,用起来也比较舒服。目前比较有名的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] 学习法语!
  • 相关阅读:
    WP7 可以在XAML中使用的 缓存图片控件(适合静态)
    wp7蛋疼的90M内存限制,优化图片使用内存(4)[解决]
    Caliburn.Micro for wp7 学习笔记(2) : 响应 Butto事件
    Caliburn.Micro for wp7 学习笔记(3) : 响应 Butto事件原理
    Caliburn.Micro for wp7 学习笔记(1) : 建立 Caliburn.Micro 框架的 wp7 项目
    anthem.net 简单学习
    新公司研发能力低下,何去何从?
    C/C++指针和取地址操作
    利用bochs 调试(转)
    winform模式对话框和非模式对话框
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/7615925.html
Copyright © 2020-2023  润新知