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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 -- 2.47.0