From dac6f8844dc9eb13de6cb422b2bf7b8ed8ca4e5a Mon Sep 17 00:00:00 2001 From: acevest Date: Wed, 8 Mar 2017 13:29:46 +0800 Subject: [PATCH] ... --- .../Closure.xcplaygroundpage/Contents.swift | 35 +++++++++++++++--- .../Contents.swift | 19 +++++++--- .../AcePlay.playground/Sources/Utils.swift | 2 +- .../UserInterfaceState.xcuserstate | Bin 21477 -> 20863 bytes 4 files changed, 44 insertions(+), 12 deletions(-) diff --git a/learn/AcePlay/AcePlay.playground/Pages/Closure.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Closure.xcplaygroundpage/Contents.swift index 6957e7e..af95109 100644 --- a/learn/AcePlay/AcePlay.playground/Pages/Closure.xcplaygroundpage/Contents.swift +++ b/learn/AcePlay/AcePlay.playground/Pages/Closure.xcplaygroundpage/Contents.swift @@ -63,6 +63,22 @@ sortedCompany = company.sorted(by: { $0 > $1 }) print(sortedCompany) sortedCompany = [] + +// 尾随闭包 +// 尾随闭包是一个书写在`函数括号之后`的闭包表达式,函数支持将其作为最后一个参数调用 +// 在使用尾随闭包时,不用写出它的参数标签 + +printLine("Trailing Closures") +sortedCompany = company.sorted() { $0 > $1} +print(sortedCompany) +sortedCompany = [] + +// 如果闭包表达式是函数或方法的唯一参数,在使用尾随闭包时,可以把`()`省掉 +sortedCompany = company.sorted { $0 > $1 } +print(sortedCompany) +sortedCompany = [] + + /* There’s actually an even shorter way to write the closure expression above. Swift’s String type defines its string-specific implementation of the greater-than operator (>) as a function that has two parameters of type String, and returns a value of type Bool. This exactly matches the function type needed by the sort(_:) method. Therefore, you can simply pass in the greater-than operator, and Swift will infer that you want to use its string-specific implementation: */ @@ -121,7 +137,7 @@ func makeIncrementer(_ step:Int) -> () -> Int { } // 闭包是引用类型 -let closureFuncA = makeIncrementer(1) +let closureFuncA = makeIncrementer(2) print("ClosureFuncA:", closureFuncA()) print("ClosureFuncA:", closureFuncA()) let closureFuncB = closureFuncA @@ -131,13 +147,16 @@ print("ClosureFuncC:", closureFuncC()) // 逃逸&非逃逸闭包 +// 当一个闭包作为参数传到一个函数中,但是这个闭包在函数返回之后才被执行,则称该闭包从函数中逃逸 +// 可以在定义参数时,在参数名前标注@escaping来指明这个闭包是允许逃逸出这个函数的 + printLine("Noescaping & Escaping Closesure") func noescapingClosure(_ closure: () -> Void) { closure() } var closureHandler: Array<() -> Void> = [] -func escapingClosure(_ closure: @escaping () -> Void) { // 此时参数前加@noescape会报错 +func escapingClosure(_ closure: @escaping () -> Void) { // 此时参数前加@noescape会报错 closureHandler.append(closure) } @@ -146,23 +165,26 @@ class ClosureClass { var x = 10 func doSomethingAboutEscape() { noescapingClosure() { x = 200 } // 将参数标记为@noescape能在闭包中隐式地引用self - escapingClosure() { self.x = 100 } + escapingClosure() { self.x = 100 } // 将一个闭包参数标记为@escaping意味着必须在闭包中显式地引用self } } var closureInstance = ClosureClass() closureInstance.doSomethingAboutEscape() print(closureInstance.x) -closureHandler[0]() + +closureHandler[0]() // 两种调用逃逸闭包的方法 +closureHandler.first?() print(closureInstance.x) +// 自动闭包 printLine("AutoClosure") print("Now Company Items:", company) print("Company Item Count:", company.count) // autoClosureHanlerA的type是 () -> String 不是 String let autoClosureHandlerA = { company.remove(at: 0) } // an autoclosure lets you delay evaluation -print("Company Item Count:", company.count) +print("Company Item Count:", company.count) // 在自动闭包被调用前,值不会变 print("No Remove \(autoClosureHandlerA())") print("Company Item Count:", company.count) @@ -177,6 +199,9 @@ autoClosureFuncParameterA({ company.remove(at: 0) }) func autoClosureFuncParameterB(_ closure: @autoclosure () -> String) { print("AutoClosureFuncParameterB \(closure())!") } + +// 用@autoclosure修饰参数 可以在调用的时候少写一对`{}` +// 过度使用@autoclosure会让代码变得难以理解 autoClosureFuncParameterB(company.remove(at: 0)) // @autoclosure 暗含了 noescape 特性 diff --git a/learn/AcePlay/AcePlay.playground/Pages/Enumerations.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Enumerations.xcplaygroundpage/Contents.swift index 3ce322c..4510d24 100644 --- a/learn/AcePlay/AcePlay.playground/Pages/Enumerations.xcplaygroundpage/Contents.swift +++ b/learn/AcePlay/AcePlay.playground/Pages/Enumerations.xcplaygroundpage/Contents.swift @@ -3,14 +3,14 @@ import UIKit enum CompassPoint { - case north + case north // 也可以写在一行上用逗号隔开 north, east, south, west case east case south case west } -var directionToHead = CompassPoint.north -directionToHead = .east +var directionToHead = CompassPoint.north // 自动推断类型 +directionToHead = .east // 一旦类型确定,再次赋值时可以省略枚举类型名 switch directionToHead { case .north: print("Losts of Plantes Have a North") @@ -49,7 +49,7 @@ enum ASCIIControlCharacter: Character { // Implicitly Assigned Raw Values // 整型从0开始自增1,每个项的rawValue不能相同 enum Planet: Int { - case mercury + case mercury // 从0开始,后续自增1,也可以指定值 如 mercury=1 case venus case earth case mars @@ -59,17 +59,22 @@ enum Planet: Int { case netpune } + print(Planet.mercury, Planet.mercury.rawValue) print(Planet.mars, Planet.mars.rawValue) + +// 使用原始值初始化枚举实例 +let possiblePlanet: Planet? = Planet(rawValue: 7) // 注意是可选类型 Planet? +print(possiblePlanet!, possiblePlanet!.rawValue) print(Planet(rawValue: 5)!, Planet(rawValue: 5)!.rawValue) // String型,每项默认为枚举项的字符串值 enum CompassPointString: String { - case North + case North // String原始值默认与枚举成员名相同 case East case Sourth - case West + case West = "WEAST" } @@ -79,6 +84,8 @@ print(CompassPointString.Sourth,CompassPointString.Sourth.rawValue) print(CompassPointString.West, CompassPointString.West.rawValue) + +// 递归枚举 printLine("Resursive Enumerations") // 不能忘记 indirect indirect enum Exp { diff --git a/learn/AcePlay/AcePlay.playground/Sources/Utils.swift b/learn/AcePlay/AcePlay.playground/Sources/Utils.swift index 8c6499a..17f7185 100644 --- a/learn/AcePlay/AcePlay.playground/Sources/Utils.swift +++ b/learn/AcePlay/AcePlay.playground/Sources/Utils.swift @@ -2,6 +2,6 @@ import UIKit public func printLine(_ title: String) -> Void { - let line = String(format:"[%@]-----------------------------------", title) + let line = String(format:"-----------------------------------<%@>", title) print(line) } diff --git a/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate b/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate index fa0d0147ea01c7f18ee998865ac38ad45643b67f..a5bd0eda41a23e5c276d7a45825adfa46ff6f58d 100644 GIT binary patch literal 20863 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 QjIV^K3H*Q0$2j+Y0F0Tx(f|Me literal 21477 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 -- 2.55.0