1 //: Playground - noun: a place where people can play 2 3 import UIKit 4 5 //*******************嵌套函数***************************** 6 func getMathFunc(type:String) -> ((Int) -> Int) { 7 func squre(num:Int) -> Int{ 8 return num * num 9 } 10 func cube(num:Int) -> Int{ 11 return num * num * num 12 } 13 switch (type) { 14 case "squre": 15 return squre 16 default: 17 return cube 18 } 19 } 20 21 var mathFunc = getMathFunc("squre") 22 mathFunc(4) 23 var mathFunc2 = getMathFunc("other") 24 mathFunc2(4) 25 26 27 //********************闭包**************************** 28 // { (形参列表) -> 返回值类型 in 29 // 可执行表达式 30 // } 31 32 func getMathFunc1(type:String) -> ((Int) -> Int) { 33 func squre(num:Int) -> Int{ 34 return num * num 35 } 36 func cube(num:Int) -> Int{ 37 return num * num * num 38 } 39 switch (type) { 40 case "squre": 41 return {(num:Int) -> Int in 42 return num * num 43 } 44 default: 45 return {(num:Int) -> Int in 46 return num * num * num 47 } 48 } 49 } 50 var maxFunc3 = getMathFunc("squre") 51 maxFunc3(5) 52 var maxFunc4 = getMathFunc("other") 53 maxFunc4(5) 54 55 // 56 var squre: (Int) -> Int = {(num) in return num * num} 57 squre(3) 58 59 60 //?? 如果??左边有值就就是原值,如果没有值那么就设置为??右边的值 61 var a:Int? 62 //a = 11 63 print(a ?? 2)
//: Playground - noun: a place where people can play import UIKit print("555") // MARK - guard func checkup(person:[String:String]){ guard let id = person["id"] else { print("没有id,不能进入") return } guard let exam = person["exam"] else{ print("没有exam,不能进入") return } print("id:\(id),exam:\(exam)--批准进入") } //checkup(["id":"123"]) //checkup(["exam":"456"]) checkup(["id":"123","exam":"456"]) //MARK - 熟悉观察 let MaxValue = 999 let MinValue = -999 var number = 0 { willSet{ print("从\(number)变为\(newValue)") } didSet{ if number > MaxValue { number = MaxValue }else if number < MinValue{ number = MinValue } print("已经从\(oldValue)变为\(number)") } } number = 1000 number //MARK - 扩展 extension //对Int扩展,增加一个方法 extension Int { func times(closure:(() -> ())?){ if self >= 0 { for _ in 0..<self { closure?() } } } } 3.times{print("走起")} //MARK 协议扩展 extension CustomStringConvertible{ var upperDescription:String{ return self.description.uppercaseString } } ["key":"value"].upperDescription //map:得到一个由闭包里面的返回值组成的新序列 //flatMap:与map类似的功能,但是会过滤掉返回值里面的nil值 //filter:得到一个由闭包返回值为true的值组成的新序列 var result = [1,2,3,4,5].map{$0 * 2} result result = [1,2,3,4,5].filter{$0 > 2} result //MARK 单例 class TestObject { static let testObject = TestObject() //私有构造,保证外部对象通过init方法创建单例类的其他实例 private init() { } }