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