作为一个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这个自动布局库的使用方法.该例子是一个简单的链式编程的学习,链式编程还有很多强大的用处,期待日后进一步的学习.