使用Playground快速练习Swift语法--闭包和枚举
闭包定义:闭包是自包含的函数代码块,可以在代码中被传递和使用。 闭包表达式语法{ (parameters) -> returnType in statements } Swift闭包使用{}包含,in语句前面定义好传入函数的参数个数,类型和返回值, 闭包使用例子let names = ["张三","李四","王五"] var reversed = names.sort({ (s1: String,s2: String) -> Bool in return s1 > s2 }) print(reversed) 闭包类型自动推断Swift中可以根据上下文自动推断闭包的参数和返回值,Swift2.0中return都可以省略。 reversed = names.sort( { s1,s2 in s1 > s2 } ) print(reversed) 还有更简化的,使用参数名缩写,Swift中使用$0,$1代表第一和第二个参数 reversed = names.sort( { $0 > $1 } ) print(reversed) 是不是已经很简化了,Swift还有更变态的,利用运算符函数 reversed = names.sort(>) print(reversed) String类型实现大于号(>)的运算符函数,其参数和返回值就是与我们sort函数要求的一致,
尾随闭包为了增加代码的可读性,我们可以使用闭包的另一种写法,即尾随闭包: reversed = names.sort() { $0 > $1 } print(reversed) 使用尾随闭包时,闭包必须是函数的最后一个参数。 reversed = names.sort{ $0 > $1 } print(reversed) Swift官方的一个尾随闭包例子 let digitNames = [ 0: "Zero",1: "One",2: "Two",3: "Three",4: "Four",5: "Five",6: "Six",7: "Seven",8: "Eight",9: "Nine" ] let numbers = [16,58,510] let strings = numbers.map { (var number) -> String in var output = "" while number > 0 { output = digitNames[number % 10]! + output number /= 10 } return output } print(strings)
枚举枚举基本使用enum 方向 { case 东 case 南 case 西 case 北 } var directionToHead = 方向.北 //或 directionToHead = .东 Switch语句使用枚举direction = .南 switch direction { case .东: print("龙为东方之神") case .南: print("朱雀为南方之神") case .西: print("白虎为西方之神") case .北: print("玄武为北方之神") }
枚举相关值Swift中的枚举的确强大,从来没见过其他语言枚举还有设置相关值的 enum Barcode { case UPCA(Int,Int,Int) case QRCode(String) } var productBarcode = Barcode.UPCA(8,85909_51226,3) productBarcode = .QRCode("ABCDEFGHIJKLMNOP") UPCA类型需要3个Int值创建,QRCode类型需要一个String类型创建 枚举默认值枚举初始化的时候可以给每个枚举值设置一个默认值,默认值必须具有相同的类型 enum ASCIIControlCharacter: Character { case Tab = "t" case LineFeed = "n" case CarriageReturn = "r" } 如果使用整数作为默认值时,指定第一个后,后续的会自动递增 enum Planet: Int { case Mercury = 1,Venus,Earth,Mars,Jupiter,Saturn,Uranus,Neptune } let earthsOrder = Planet.Earth.rawValue let possiblePlanet = Planet(rawValue: 7) 使用枚举的rawValue属性获取默认值; 参考资料The Swift Programming Language 中文版
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |