Objective-C中实现链式语法 解释

#import <Foundation/Foundation.h>


@interface ClassA : NSObject

@end


@interface ClassB : NSObject

- (id)initWithString:(NSString *)str;

@end




#import "ClassA.h"


@class ClassB;


@interface ClassA ()


@property (nonatomic, readonly)ClassA *(^aaa)(BOOL eblne);

@property (nonatomic, readonly)ClassA *(^bbb)(NSString * str);

@property (nonatomic, readonly)ClassB *(^ccc)(NSString * str);


@end


@implementation ClassA


- (ClassA *(^)(BOOL))aaa

{

    return ^(BOOL eblne){

        if (eblne) {

            NSLog(@" is YES");

        }else

        {

            NSLog(@" is NO");

        }

        return self;

    };

}



- (ClassA *(^)(NSString *str))bbb

{

    return ^(NSString * str){

        NSLog(@"str:%@", str);

        return self;

    };

}


// 这里返回了ClassB的一个实例,于是后面就可以继续链式 ClassB block 方法

// 见下面例子 .ccc(@"Objective-C").ddd(NO)

- (ClassB *(^)(NSString * str))ccc

{

    return ^(NSString *str) {

        //code

        NSLog(@"b %@", str);

        ClassB * b = [[ClassB alloc] initWithString:str];

        return b;

    };

}


@end



@interface ClassB ()


@property(nonatomic, readonly)ClassB*(^ddd)(BOOL eblne);


@end


@implementation ClassB


- (id)initWithString:(NSString *)str

{

    return self;

}


- (ClassB*(^)(BOOL eblne))ddd

{

    return ^(BOOL eblne){

        if (eblne)

        {

            NSLog(@"classB yes");

        }else

        {

            NSLog(@"classB no");

        }

        return self;

    };

}


// 最后我们可以这样做

//id a = [ClassA new];

//a.aaa(YES).bbb(@"HelloWorld!").ccc(@"Objective-C").ddd(NO);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值