美文网首页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