一直都知道斯坦福大学白胡子老头的iOS课程,可是一直没看,今天看了第二节课,因为第一节都是一些基础,所以选择直接看了第二节课,讲的是swift,使用swift写一个计算器. 讲了有option,unwrap,function. 讲function的时候,连带了闭包以及一些东西,让我看到了一些新的东西,有点后悔没有早点学习.在这里记录一下自己觉得不错的地方.
//声明一个变量,来接收结果.
var result: Double?
//声明一个数组
var array: Array<Double> = Array<Double>()
//数组添加两个元素,在下面我们将会让这个数组里面的元素进行相加.
array.append(22.3)
array.append(24.5)
//首先声明一个函数
//该函数可以执行加减乘除的功能.
//参数`operation`是一个含有两个Double类型的参数,并且会返回一个Double类型值的Function(方法)
func performOperation(_ operation: (_ op1: Double, _ op2: Double) -> Double){
//将数组里的两个元素传递给operation函数
//用result接收结果.
result = operation(array.removeLast(), array.removeLast())
}
//我们继续写一个加法的方法
/// 传入两个参数,返回两个参数相加的和
///
/// - Parameters:
/// - op1: 第一个参数
/// - op2: 第二个参数
/// - Returns: 两个参数的和
func plusOperation(op1: Double, op2: Double) -> Double {
return op1 + op2
}
//接下来我们调用performOperation
//将plusOperation函数当做参数传递给performOperation.
performOperation(plusOperation)
//输出result
print("\(result!)")
//输出结果:
//"46.8\n"
我们这里先给计算器增加加减乘除四种功能.
这样一来,类似于plusOperation的方法,我们就得写四次,这样看起来重复的内容就显得太多了,所以,我们可以对上面的几个方法进行一下简化.
//我们可以把performOperation的调用进行简化.
//因为该方法的参数是一个方法,所以我们直接把函数的名字省略掉,然后用花括号包住参数,在返回值后面加上个`in`
performOperation({(op1: Double, op2: Double) -> Double in
return op1 + op2
})
如此一来,我们就省略了写4个方法.
不过该方法还可以继续简化,接着向下看:
performOperation{(op1: Double, op2: Double) -> Double in
return op1 + op2
}
performOperation(){(op1: Double, op2: Double) -> Double in
return op1 + op2
}
现在我们把花括号外边的两个圆括号去掉,或者在最前面加上一个圆括号,这是因为如果我们这个方法有参数的话.会把参数写到括号里面. 之所以能把闭包写到括号外面,是因为遵循: 如果一个方法的最后一个参数是函数,那么就可以把函数的实现,写到这个方法的最后面(所有参数的最后面,如果没有参数的话,那么圆括号也是可以省略的).
OK,接下来,我们继续对其进行简化:
performOperation{ (op1, op2) -> Double in
return op1 + op2
}
我们可以看到,上面把闭包(我认为闭包和函数在Swift中差不多,如果不对的话,还请大神指出)里面的参数的类型直接省略了,因为Swift自己会进行推断.这可能也是Swift智能的一点吧.
OK,接下来,我们继续对其进行简化.
performOperation{return $0 + $1}
这次我们直接把参数和返回值类型都给省略掉了,只剩下一个返回值和两个参数的和. 返回值: Swift会自动推断返回值类型 参数: 如果一个闭包含有多个参数的时候,我们可以对参数进行省略,使用$0,$1,$2,$3....etc.来代替参数列表.参数的顺序依次对应. 这样看起来我们的方法变得非常简单,不过我们还可以对其进行简化
performOperation{$0 + $1}
如果闭包里面只有一条语句,那么连return都可以省略掉,还是那句话,Swift会自己推断. 现在回头看看第一个方法,是不是已经很简化了.
Peace Out