swift中鏈式編程思想

作為一個iOS程序員基本上都應該接觸過Masonry這個自動布局庫。這個庫能夠幫助程序員極大程度的簡化自動布局的代碼。通過點(.)調用的方式,將代碼連接成一行,大大增加了代碼的可讀性,這就是本篇要提到的鏈式編程。本篇主要是通過一個簡單的例子來實現(xiàn)上述的鏈式編程。

計算器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要做一個連續(xù)的運算
let r3 = CalculatorMaker.add(n1: Calculator.add(num1: 1, num2: 2),n2: Calculator.sub(num1: 4, num2: 3))

此時r3太過復雜,我們需要對代碼用鏈式編程的思想進行優(yōu)化.

優(yōu)化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)

此時,使用已經比之前方便多了,但是還是不能連續(xù)點(·)的操作,所以繼續(xù)優(yōu)化.

優(yōu)化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

此時已經可以用點(.)方法連續(xù)調用了,只是如果使用多次的話,每次都需要創(chuàng)建一個CalculatorMaker對象,所以還可以繼續(xù)優(yōu)化.

優(yōu)化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這個自動布局庫的使用方法.該例子是一個簡單的鏈式編程的學習,鏈式編程還有很多強大的用處,期待日后進一步的學習.

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容