携手创作,共同生长!这是我参加「日新计划 8 月更文应战」的第31天,点击查看活动详情

I 准备知识

先来了解下开发进程中常常触摸的几个编程思想

1.1 面向进程

处理工作以进程为中心,一步一步的完成。

1.2 面向目标

万物皆目标

面向目标比照面向进程的优胜之处在于,名词化的概念比动词化的描绘,更便于人类了解。

这也是相比函数式编程的主要长处,许多函数是难以命名的,但目标却很容易。

封装是为了更好的重用性、可扩展性,但要综合考虑功能问题,即使新增了判别也会添加功能的耗费,仅仅不会量级的添加。比如简略工厂和抽象工厂(反射机制)的封装,会添加功能的耗费。但把目标的办理变成了可配置化。

1.3 函数式编程

把操作尽量写成一系列嵌套的函数或者办法调用。

函数式编程特点:每个办法必须有回来值(自身目标),把函数或者Block当做参数,block参数(需求操作的值)block回来值(操作结果) 代表:ReactiveCocoa

1.4 链式编程

将多个操作(多行代码)经过点号(.)链接在一起成为一句代码,使代码可读性好a(1).b(2).c(3)。

链式编程特点:办法的回来值是block,block必须有回来值(自身目标),block参数(需求操作的值)

代表:masonry结构

 p.run() <=> [p run]();//履行办法的同时之后,当即履行办法回来的block

1.5 呼应式编程

不需求考虑调用顺序,只需求知道考虑结果,类似于蝴蝶效应,产生一个事情,会影响很多东西,这些事情像流一样的传达出去,然后影响结果,借用面向目标的一句话,万物皆是流。

代表:

  1. KVO 是 Objective-C 对观察者办法(Observer Pattern)的完成,也是 Cocoa Binding 的基础。当被观察目标的某个特点产生更改时,观察者目标会获得通知。
  2. Reactive Cocoa结构
  3. vuejs: staging-cn.vuejs.org/guide/intro…

II 链式编程的比如

2.1 完成链式编程的两种办法

  1. 声明特点,特点的类型是block,block必须有回来值(自身目标),block参数(需求操作的值)

  2. `声明办法: 便是履行(getter)办法之后,得到一个block,block必须有回来值(自身目标),block参数(需求操作的值)

缺点便是 Xcode提示不太友爱。不引荐`

两种完成办法实质都是一样的:

  • 假如想再去调用其他目标办法,那么就需求回来一个目标;
  • 假如想用()去履行,那么需求回来一个block;
  • 假如想让回来的block再调用目标的办法,那么这个block就需求回来一个目标。

2.2 经过声明办法办法完成链式编程

缺点: Xcode提示不太友爱(不引荐)

block 完成链式编程的比如1:(将block和method的特性 结合起来) github.com/zhangkn/DKU…

直接声明办法的回来值是block,block必须有回来值(自身目标),block参数(需求操作的值)

比如: p.run() <=> [p run]() 效果: p.run() <=> [p run]();// 履行办法的同时之后,当即履行办法回来的block。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        //运用block完成链式编程
        People *p=  [[People alloc]init];
//        p.run() <=> [p run]();// 履行办法的同时之后,当即履行办法回来的block。
        p.run().study();
        p.run().name(@"将block和method的特性 结合起来");
    }
    return 0;
}

代码的完成

#import "People.h"
@implementation People
- (People *(^)())run{
    return ^{
        NSLog(@"run");
        return self;
    };// 回来一个block
}
- (People *(^)())study{
    return ^{
        NSLog(@"study");
        return self;
    };// 回来一个block
}
- (People *(^)(NSString *))name{
    return ^(NSString *name){
        NSLog(@"%@",name);
        return self;
    };
}

2.3 经过声明特点办法完成链式编程

声明特点,特点的类型是block,block必须有回来值(自身目标),block参数(需求操作的值)

声明特点: 实质便是利用他的getter办法

完整SDK源码【封装富文本API,选用block完成链式编程】(block 的妙用:结合block和办法的长处完成iOS的链式编程)

  1. 文章:blog.csdn.net/z929118967/…

  2. 从CSDN资源下载完整SDK代码:https://download.csdn.net/download/u011018979/14038715

  3. 部分API

iOS小技能:链式编程在iOS开发中的应用

  1. 用法比如
    iOS小技能:链式编程在iOS开发中的应用
    iOS小技能:链式编程在iOS开发中的应用
    iOS小技能:链式编程在iOS开发中的应用
    NSMutableAttributedString *xx  = [[NSMutableAttributedString alloc]init];
    xx.kn_addString(@"封装富文本API").kn_fontColor(UIColor.redColor).kn_addString(@"选用block完成链式编程").kn_fontColor(UIColor.blueColor).kn_addString(@"!");

github.com/zhangkn/Cha…

以Masonry 结构为比如,进行分析

调用的equalTo:办法 回来的便是一个回来值为MASConstraint的block

- (MASConstraint * (^)(id))equalTo { return ^id(id attribute) { return self.equalToWithRelation(attribute, NSLayoutRelationEqual); }; }

用法

- (UIImageView *)imgForReason{
    if (nil == _imgForReason) {
        UIImageView *img2 = [[UIImageView alloc] init];
        _imgForReason = img2;
        [self addSubview:_imgForReason];       
        [img2 mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.equalTo(self.mas_left).offset(25);
            make.top.equalTo(self.imgForPassword.mas_bottom).offset(12);
            make.size.mas_equalTo(CGSizeMake(kScreenWidth-100, 76));
        }];
    }
    return _imgForReason;
}

see also

iOS富文本&图文混排的运用指南

1、封装富文本API,选用block完成链式编程

2、 超链接特点

3、HTML字符串与富文本互转

4、创立带有图片的富文本

————————————————

版权声明:本文为CSDN博主「#大众号:iOS逆向」的原创文章,遵从CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:blog.csdn.net/z929118967/…

大众号:iOS逆向