首先来说枚举类型~
枚举类型的声明方式:
enum Toward {
case Forward
case Back
case Left
case Right
}
枚举类型是用于别名定义一些有限的类型和一些复杂的数据结构。枚举类型的使用,能让你的代码结构更分明,可读性也得到提升。
另外,如果需要给枚举中的枚举值赋值,必须指定枚举的类型:
enum Toward:Int {
case Forward = 1
case Back = 2
case Left = 3
case Right = 4
}
极好的事情是,enum中的case下,不仅仅可以是变量,而且可以是函数:栗子如下
private enum Op: CustomStringConvertible{
case Operand(Double)
case UnaryOperation(String, Double -> Double)
case BinaryOperation(String, (Double,Double) -> Double)
}该enum的声明中并木有对各个case赋值,只是规定了其变量或者函数的类型。(相当于是一个模版)
在需要的时候,对Op.BinaryOperation(或者其他两个)赋值即可。栗子:
knownOps["÷"] = Op.BinaryOperation("÷") { $1/$0 }
这里使用了闭包,且是尾部闭包,下面来说闭包:
闭包可以捕获并存储其上下文中任意常量和变量的引用,这就是所谓的闭合并包裹着这些常量和变量,俗称闭包。
重要的是,闭包是引用类型。
下面举一个栗子:
fun plus(amount:Int) -> ()->Int{
var total = 0
func incrementor() -> Int{
total +=amount
return total
}
return incrementor
}
可见,该函数plus的返回值是一个函数。而plus内部还有一个变量total用于保存累加的结果
下面进行某些神奇的操作~
let plusTen = plus(10)
swift的类型推倒,会认定,plusTen就是一个函数,该函数的参数为空,并返回一个Int类型的数值(incrementor)
这样如果我反复执行着:
plusTen()
plusTen()
plusTen()
那么返回的值将会是10,20,30。。。
这个plusTen就是一个闭包~
如果:let plusTen1 = plusTen
那么,在执行plusTen1的时候,返回值将是40
因为闭包是引用类型!
今天就到这里啦,作为一只兔子要去蹦跶一会儿了~