高阶函数的定义、使用与语义

<高阶函数定义了高阶类型的处理(映射)、低阶函数处理了低阶类型的映射,高阶函数依赖于低阶函数>

 

高阶函数的特点:

1、定义的高阶函数本身的实现 ;

2、定义了参量函数的接口:输入、输出;

3、定义了高阶函数的功能部分对输入函数的引用或使用方式。

 

 语义:定义高阶函数并声明混入函数的接口

本质是暴露低阶函数的接口给高阶函数使用;

 

scala:

def operate(f:(Int,Int) => Int ) = {

f(4,4)

 

swift:

protocol ViewChainable {}

extension ViewChainable where Self: UIView {

    @discardableResult

    func config(_ config: (Self) -> Void) -> Self {

        config(self)

        return self

    }

}

extension UIView: ViewChainable {

    func adhere(toSuperView: UIView) -> Self {

        toSuperView.addSubview(self)

        return self

    }

    @discardableResult

    func layout(snapKitMaker: (ConstraintMaker) -> Void) -> Self {

        self.snp.makeConstraints { (make) in

            snapKitMaker(make)

        }

        return self

    }

 

 

混入函数的混入形式(匿名函数):

 

语意:

调用高阶函数,同时定义符合接口声明的混入函数并传递进去

 

swift:

let label = UILabel()

    .adhere(toSuperView: view)

    .layout { (make) in

        make.top.equalToSuperview().offset(80)

        make.centerX.equalToSuperview()

    }

    .config { (label) in

        label.backgroundColor = UIColor.clear

        label.font = UIFont.systemFont(ofSize: 20)

        label.textColor = UIColor.darkGray

        label.text = "Label"

    }

 

extension PrimitiveSequence where TraitType == SingleTrait, ElementType == Response

{

    public func mapModel<T: HandyJSON>(_ type: T.Type) -> Single<Any> {

        return flatMap { response -> Single<Any> in

            return Single.just(response.mapModel(type))

        }

    }

    

    public func updateModel<T: HandyJSON>(_ model: T) -> Single<Any> {

        return flatMap { response -> Single<Any> in

            return Single.just(response.updateModel(model))

        }

    }

}

 

scala:

 //list元素乘以2,对每一个元素都做同一个操作

  val l =List(1,2,3,4,5,6,7,8)

  l.map((x:Int) => x*2)//最古老的方法

  l.map(x => x*2)//简化的写法

  l.map(_*2)//超简化写法

posted @ 2019-03-11 11:53  zzfx  阅读(1510)  评论(0编辑  收藏  举报