Swift之链式调用
2016-12-26 本文已影响127人
LimChihi
代码环境
- Swift 3.0.2
- macOS 10.12.2
- Xcode Version 8.2 (8C38)
原理
链式编程的原理是调用一个属性或者方法的返回值是调用者本身。使得其可以继续调用本身中的方法或者属性。
Demo
新建Calculator.swift
文件并建立类,然后添加加减乘除四种运算
class Calculator {
private result: Double = 0.0
func add(_ num: Double) -> Calculator{
result += num
return self
}
func sub(_ num: Double) -> Calculator {
result -= num
return self
}
func mul(_ num: Double) -> Calculator {
result *= num
return self
}
func div(_ num: Double) throws -> Calculator {
guard num != 0 else {
throw MyError.DivZero
}
result /= num
return self
}
}
其中除法我有异常抛出,所以要新建个处理异常的枚举类型。
enum MyError: Error {
case DivZero
case unKnownError
}
然后在Calculater
中添加实现计算的代码
class Calculator {
static func calculator( _ do:(_ make: Calculator) -> () ) -> Double{
let maker = Calculator()
do(maker)
return maker.result
}
......
}
最后在main.swift
中调用。<br />
Demo是macOS
命令行程序,iOS在相应的事件中调用即可。
let result = Calculator.calculator { (make) in
_ = make.add(5).mul(4).sub(3)
do {
_ = try make.div(0)
}catch {
let error = error as! MyError
switch error {
case .DivZero:
print("除数不能为0")
default:
break
}
}
}
print(result)