美文网首页
使用链式编程简化多参数调用

使用链式编程简化多参数调用

作者: hj的简书 | 来源:发表于2018-05-09 15:07 被阅读0次

1.开发疑惑和想要的结果

在项目开发中,如果遇到多参数传递可能会出现如下问题:


参数不同导致方法不同

写完第一个头像加载方法后,因为没有考虑到头像边框和边框颜色的问题导致加入第二个和第四个头像加载方法,这样就会使之后的开发会因为选择使用哪一个方法而产生困惑。

使用链式编程的思想,将参数以block的形式连接起来就可以解决上述的疑惑

[self.avatarView hj_makeAvatarWithAttribute:^(HJAvatarAttribute *attribute) {
        attribute.imageURL(avatarURL);
        attribute.avatarSize(CGSizeMake(50, 50));
        attribute.borderColor([UIColor redColor]).borderWidth(1).radius(25);
}];

这样不仅调用简单,而且可以很清楚的看到传递了什么参数。

2.代码实现片段

@interface HJAvatarAttribute : NSObject

.....
@property (nonatomic, strong) NSURL *imageURLA;
@property (nonatomic, copy) HJAvatarAttribute *(^imageURL)(NSURL *imageURL);
....

+ (instancetype)defauleAttribute;

@end


@interface HJAvatarView : UIView

- (void)hj_makeAvatarWithAttribute:(void (^)(HJAvatarAttribute *attribute))attributeBlock;

@end

@implementation HJAvatarAttribute

+ (instancetype)defauleAttribute
{
    HJAvatarAttribute *attribute = [HJAvatarAttribute new];
    attribute.borderWidthA = 1;
    ....

    return attribute;
}

- (HJAvatarAttribute *(^)(NSURL *))imageURL
{
    return ^(NSURL *imageURL) {
        self.imageURLA = imageURL;
        
        return self;
    };
}

.....
@end

@implementation HJAvatarView
- (void)hj_makeAvatarWithAttribute:(void (^)(HJAvatarAttribute *))attributeBlock
{
    attributeBlock(self.defaultAttribute);

    [self.avatarView setImageWithURL:self.defaultAttribute.imageURLA  ....];
}

// 使用默认配置进行初始化操作,在用户没有配置参数时,使用默认参数代替
- (HJAvatarAttribute *)defaultAttribute
{
    if (!_defaultAttribute) {
        _defaultAttribute = [HJAvatarAttribute defauleAttribute];
    }
    
    return _defaultAttribute;
}

@end

这里要注意的就是在HJAvatarAttribute中,为了达到链接的效果,属性必须要返回当前HJAvatarAttribute *的实例,并且可以传递参数进去,这样很自然的就想到使用block进行实现。

在调用hj_makeAvatarWithAttribute方法时,将实例化后的HJAvatarAttribute *属性以block形式,传给方法调用者进行赋值操作。

代码实现细节可以查看 我的github

相关文章

  • 使用链式编程简化多参数调用

    1.开发疑惑和想要的结果 在项目开发中,如果遇到多参数传递可能会出现如下问题: 写完第一个头像加载方法后,因为没有...

  • 链式编程的简单使用

    简单使用链式编程来设置UIButton的一些内容: 链式编程调用的点语法,本质也是调用方法,下面方法也可写成btn...

  • 使用OC链式调用方式简化SpriteKit的动画调用

    一,什么是链式调用? 在网络前端编程里使用JQuery,经常可以看到链式调用,代码易读简洁。 例如: $(“#Te...

  • iOS-链式编程

    函数式编程------->链式编程 函数式编程: 调用方式 我们最终目的是将函数式编程转换为链式编程:首先将调用方...

  • iOS之Objective-C中实现链式语法

    链式语法:在一行代码之内多次以点调用的形式调用方法。链式语法能使复杂的代码使用简化,看起来非常的优雅。 Objec...

  • 使用Lodash链式调用简化代码

    获取到的数据: 前端展示需要的格式: 最开始的写法,简单说就是:for循环嵌套 重构该方法,使用lodash的链式...

  • 编程思想-链式编程

    编程思想-链式编程 链式编程(链式调用)的主要表现是支持点语法结构的代码,代表库可以参照 Masonry 或 Sn...

  • swift重温笔记(可选链式调用)

    使用可选链式调用代替强制展开 为可选链式调用定义模型类 通过可选链式调用访问属性 通过可选链式调用调用方法 通过可...

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

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

  • Kotlin那些实用的语法糖

    使用with、apply、run简化代码,增强可读性 相比较而言使用apply更符合链式编程的习惯run函数具有表...

网友评论

      本文标题:使用链式编程简化多参数调用

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