美文网首页iOS开发实用技术
swift中链式编程思想

swift中链式编程思想

作者: 翀鹰精灵 | 来源:发表于2018-03-16 16:46 被阅读138次

作为一个iOS程序员基本上都应该接触过Masonry这个自动布局库。这个库能够帮助程序员极大程度的简化自动布局的代码。通过点(.)调用的方式,将代码连接成一行,大大增加了代码的可读性,这就是本篇要提到的链式编程。本篇主要是通过一个简单的例子来实现上述的链式编程。

计算器Demo

class CalculatorMaker {
    static func add(num1 : Int,num2 : Int)->Int {
        return result += num
    }
    static func sub(num1 : Int,num2 : Int)->Int {
        return result -= num
    }
}

使用方法:

let r1 = CalculatorMaker.add(num1: 1, num2: 2)
let r2 = CalculatorMaker.sub(num1: 4, num2: 3)
// 新需求: add和sub要做一个连续的运算
let r3 = CalculatorMaker.add(n1: Calculator.add(num1: 1, num2: 2),n2: Calculator.sub(num1: 4, num2: 3))

此时r3太过复杂,我们需要对代码用链式编程的思想进行优化.

优化1:

class CalculatorMaker {
    var result : Int = 0
   func add(num : Int)->Int {
        result += num
        return result
    }
    func sub(num : Int)->Int {
        result -= num
        return result
    }
}

使用方法:

let alculator = CalculatorMaker()
alculator.add(num: 1)
alculator.sub(num: 2)

此时,使用已经比之前方便多了,但是还是不能连续点(·)的操作,所以继续优化.

优化2:

class CalculatorMaker {
    var result : Int = 0
    func add(num : Int)->Calculator {
        result += num
        return self
    }
    func sub(num : Int)->Calculator {
        result -= num
        return self
    }
}

使用方法:

let alculator = CalculatorMaker()
alculator.add(num: 1).sub(num: 2)
alculator.result

此时已经可以用点(.)方法连续调用了,只是如果使用多次的话,每次都需要创建一个CalculatorMaker对象,所以还可以继续优化.

优化3:

class CalculatorMaker {

    var result : Int = 0
    func add(num : Int)->CalculatorMaker {
        result += num
        return self
    }
    func sub(num : Int)->CalculatorMaker {
        result -= num
        return self
    }
}

class Calculator {
    static func beginCalculator( calculatorBlock:(CalculatorMaker)->()) -> Int{
        let calculator = CalculatorMaker()
        calculatorBlock(calculator)
        return calculator.result
    }
}

使用方法:

Calculator.beginCalculator { (calculator) in
    calculator.add(num: 1).sub(num: 2)
}

很显然,此时使用方法已经很方便了,类似Masonry这个自动布局库的使用方法.该例子是一个简单的链式编程的学习,链式编程还有很多强大的用处,期待日后进一步的学习.

相关文章

网友评论

    本文标题:swift中链式编程思想

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