Swift方法的简写
本文来自斯坦福大学的iOS公开课-02 首先举个例子,一个计算器,需要最基本的加减乘除运算,代码如下 import Foundation
//取操作数,假设已经取到如下
let op1 = 1.1;
let op2 = 2.2;
func operate(operation:NSString) {
switch operation {
case "+": performOperation(add)
case "-": performOperation(subtract)
case "×": performOperation(multiply)
case "÷": performOperation(devide)
default: break
}
}
//处理运算
func performOperation(operation:(Double,Double) -> Double) { let value = operation(op1,op2); //得到结果后的一些其他操作 NSLog("value = (value)") } //× func multiply(op1:Double,op2:Double) -> Double {
return op1 * op2
}
//÷
func devide(op1:Double,op2:Double) -> Double {
return op1 / op2
}
//+
func add(op1:Double,op2:Double) -> Double {
return op1 + op2
}
//-
func subtract(op1:Double,op2:Double) -> Double {
return op1 - op2
}
一个 接下来我们来简写。 第一步,省去多余函数将 //Step 1.直接把函数名之后的从括号开始全部移走
func operate(operation:NSString) {
switch operation {
case "+": performOperation((op1:Double,op2:Double) -> Double {
return op1 + op2
})
...
}
}
//Step 2.左花括号提到函数左括号前面
func operate(operation:NSString) {
switch operation {
case "+": performOperation({(op1:Double,op2:Double) -> Double
return op1 + op2
})
...
}
}
//Step 3.在原来左花括号的位置加一个单词`in`
func operate(operation:NSString) {
switch operation {
case "+": performOperation({(op1:Double,op2:Double) -> Double in
return op1 + op2
})
...
}
}
现在的状态是没有红色报错的,并且改动处仍属于一条语句。 第二步,省去类型因为Swift最厉害的地方就是类型推断,它可以通过上下文来推断一个变量的类型,所以根据上下文我们知道 所以,我们可以把类型略掉,把返回类型去掉,箭头也当然要去掉。(这个和Lambda表达式有点类似) func operate(operation:NSString) {
switch operation {
case "+": performOperation({(op1,op2) in return op1 + op2})
...
}
}
又因为Swift知道里面的表达式一定是返回一个值,所以 func operate(operation:NSString) {
switch operation {
case "+": performOperation({(op1,op2) in op1 + op2})
...
}
}
第三步,最简化这时有人突然跑来看你的代码,觉得很奇怪,为什么这里好像是调用 在Swift中,会自动给参数顺序命名 func operate(operation:NSString) {
switch operation {
case "+": performOperation({$0 + $1})
...
}
}
和原来比简直简化到不能忍!!! 可以回到最前面看下原来的代码,然后再看下下面简化后的: import Foundation
//取操作数,假设已经取到如下
let op1 = 1.1;
let op2 = 2.2;
func operate(operation:NSString) {
switch operation {
case "+": performOperation({ $0 + $1 })
case "-": performOperation({ $0 - $1 })
case "×": performOperation(){ $0 * $1 } //当参数为最后一个参数时,可以放在外面
case "÷": performOperation{ $0 / $1 } //如果只有它一个参数,甚至可以不需要小括号
default: break
}
}
//处理运算
func performOperation(operation:(Double,Double) -> Double) {
let value = operation(op1,op2);
//得到结果后的一些其他操作
NSLog("value = (value)")
}
细心的人注意到有个小小的变动,就是花括号刚好为 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |