美文网首页大前端开发
oc 利用block实现链式调用

oc 利用block实现链式调用

作者: c5b9f0203861 | 来源:发表于2019-05-16 16:58 被阅读8次

工作记录,加深记忆,方便以后查询。

作为一个iOS开发者,都知道它的常规方法调用是通过中括号[a f:b]。

有时候需要在外部设置很多的参数,这样用传统的方式可能不是很好看,要写很多的中括号调用。

///.h

@interface Test : NSObject

- (void)value1:(NSString*)v1;

- (void)value2:(BOOL)v2;

- (void)value3:(NSInteger)v3;

@end

/////.m

@implementation Test

{

    NSString*    mV1;

    BOOL           mV2;

    NSInteger   mV3;

}

- (void)value1:(NSString*)v1{

    mV1 = v1;

}

- (void)value2:(BOOL)v2; {

    mV2 = v2;

}

   - (void)value3:(NSInteger)v3{

    mV3 = v3;

}

@end

在Test调用时,需要像下面这样调用

Test* test = [Test new];

[test value1:@"value"];

[test value2:true];

[test value3:1]

上面是传统的OC调用方式,但是在一个对象需要设置很多配置项时,这样调用就显得比较笨重了,或者说看着没有那么优雅。

现在有很多开发者喜欢用出代码来实现自动布局,那么肯定对masonry很熟悉了,它的调用方式就不是传统的OC调用方式,而是使用的链式调用,java开发者可能比较熟悉,通过点把方法连接起来。

make.left.equalTo(@0).right.equalTo(@0);

用这种方式来调用上面Test 方法,就是下面这周写法

test.value1(@"value").value2(true).value3(1)...............

那么OC是通过什么来实现链式调用呢,就是传说中的block。一般的block都是用来做回调用的。来看看它是怎么帮助我们实现链式调用的。

主要就是方法的参数返回,可以返回一个block,block再把对象实例返回回来,就可以达到这个目的。看起来起来可能抽象,把上面的方法调用写成链式的可能会比较容易理解。

///.h

@interface Test : NSObject

- (Test*(^)(NSString* v1))value1;

- (Test*(^)(BOOL v2))value2;

- (Test*(^)(NSInteger v3))value3;

@end

/////.m

@implementation Test

{

    ............

}

- (Test*(^)(NSString* v1))value1{

  @weakify(self)  

   return ^(NSString* v1){

       @strongify(self)

        mV1 = v1;

        return self;

    }

}

- (Test*(^)(BOOL v2))value2{

@weakify(self) 

return ^(BOOL v2){

     @strongify(self)

       mV2 = v2;

       return self;

    }

}

- (Test*(^)(NSInteger v3))value3{

@weakify(self) 

return ^(NSInteger v3){

         @strongify(self)

        mV3 = v3;

        return self;

    }

}

@end

在外部调用的时候就可以使用链式调用

Test* test = [Test new];

test.value1(@"value").value2(true).value3(1);

而我习惯写一个类方法在内部创建实例

 + (Test*(^)(void))create{

    return ^(void){

        return [Test new];

    }

}

/////外部使用的时候

Test.create().value1(@"value").value2(true).value3(1);

这就是利用block实现链式调用,在实际的开发项目中,发起网络请求的时候需要设置很多参数,例如:url、params、loading、sign、get/post/form、response class等等,这个时候用链式调用设置这些参数会显得发长的方便。

上面只是block一个简单的使用,block还有很多强大的功能,以后再写。

相关文章

  • oc 利用block实现链式调用

    工作记录,加深记忆,方便以后查询。 作为一个iOS开发者,都知道它的常规方法调用是通过中括号[a f:b]。 有时...

  • iOS链式调用的简单实现

    利用方法返回一个Block(这个Block内部返回self)来实现方法的链式调用。 栗子?: 代码分析: 首先调用...

  • Objective-C 链式调用

    OC 方法的调用都是通过 [] 实现的,如果想要连续调用就要进行多层嵌套,我们可以利用 block 的来实现 Ob...

  • iOS原生&JS交互

    OC 获取js中的key OC调用js方法 JS调用OC中不带参数的block JS调用OC中带参数的block ...

  • 利用Block实现链式编程

    1、Person的方法 2、执行代码 总结:

  • 利用block实现链式编程

    虽然链式编程很少见,但是某些场合下,如果能够巧妙利用block 实现链式编程的话,不仅会提高开发效率,而且代码很清...

  • 链式文件生成器原理分析(一)

    在OC里面实现链式编程,可以使用返回调用者自身来实现。但是类有很多,每个类也有很多方法,假如要实现链式编程,则需要...

  • swift 调用 OC中的block

    OC中声明block; OC中实现block swift中实现

  • Objective-C 链式调用示例

    Objective-C 链式调用 .链式调用的特点:方法的返回值是block,block的返回值类型必须是类本身类...

  • 链式调用原理

    常规写法: 链式调用: 实现原理: 调用方法之后返回自己,以实现链式调用 具体代码:

网友评论

    本文标题:oc 利用block实现链式调用

    本文链接:https://www.haomeiwen.com/subject/azeiaqtx.html