From 692255659f3d737fad64f92df5595f975ef1c694 Mon Sep 17 00:00:00 2001 From: Ace Date: Sun, 6 Nov 2016 09:38:17 +0800 Subject: [PATCH] convert swift from 2.2 to 3.0 --- .../Basics.xcplaygroundpage/Contents.swift | 18 ++--- .../Closure.xcplaygroundpage/Contents.swift | 42 +++++----- .../Contents.swift | 74 +++++++++--------- .../Functions.xcplaygroundpage/Contents.swift | 4 +- .../AcePlay.playground/Sources/Utils.swift | 4 +- learn/AcePlay/AcePlay.playground/Utils.remap | 7 ++ .../AcePlay.playground/contents.xcplayground | 2 +- .../UserInterfaceState.xcuserstate | Bin 15476 -> 18345 bytes .../AppleSwift.xcodeproj/project.pbxproj | 3 + .../UserInterfaceState.xcuserstate | Bin 12773 -> 15044 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 21 +++++ learn/AppleSwift/AppleSwift/main.swift | 26 +++--- learn/doc/mac_bash_profile | 3 +- 13 files changed, 118 insertions(+), 86 deletions(-) create mode 100644 learn/AcePlay/AcePlay.playground/Utils.remap create mode 100644 learn/AppleSwift/AppleSwift.xcodeproj/xcuserdata/Ace.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist diff --git a/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift index 1ff1148..1f82280 100644 --- a/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift +++ b/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift @@ -6,7 +6,7 @@ let str = "Hello, playground.小狗:🐶 锤子:🔨" // Index let strInx:String.Index = str.startIndex -strInx.successor() +str.index(after: strInx) print(strInx) for c in str.characters { @@ -19,12 +19,12 @@ var company:Array = [ "Apple", "Google", "Facebook", "Tencent" ] print(company[0], company[1], company[2], company[3], separator: "#", terminator: " $$$$$\n") printLine("Count company Array 1") -for (i,v) in company.enumerate() { // enumerate 返回的是 index value 组成的元组 +for (i,v) in company.enumerated() { // enumerate 返回的是 index value 组成的元组 print(i, v, separator: " - ", terminator: "\n") } printLine("Count company Array 2") -company.insert("Alibaba", atIndex: company.count) +company.insert("Alibaba", at: company.count) for i in 0..(0..(0.. Bool { +func backwardsA(_ a: String, b: String) -> Bool { return a > b } -sortedCompany = company.sort(backwardsA) +sortedCompany = company.sorted(by: backwardsA) print(sortedCompany) sortedCompany = [] printLine("Sort With Backwards Closure A [Closure Expression Syntax]") -sortedCompany = company.sort({ (a: String, b: String) -> Bool in return a>b }) +sortedCompany = company.sorted(by: { (a: String, b: String) -> Bool in return a>b }) print(sortedCompany) sortedCompany = [] // 参数及返回类型自动推断 printLine("Sort With Backwards Closure B [Inferring Type From Context]") -sortedCompany = company.sort({ a, b in return a > b }) +sortedCompany = company.sorted(by: { a, b in return a > b }) print(sortedCompany) sortedCompany = [] // 隐式返回表达式闭包,省略return printLine("Sort With Backwards Closure C [Implicit Returns from Single-Expression Closures]") -sortedCompany = company.sort({ a, b in a > b }) +sortedCompany = company.sorted(by: { a, b in a > b }) print(sortedCompany) sortedCompany = [] // 简写参数名 printLine("Sort With Backwards Closure D [Shorthand Argument Names]") -sortedCompany = company.sort({ $0 > $1 }) +sortedCompany = company.sorted(by: { $0 > $1 }) print(sortedCompany) sortedCompany = [] @@ -67,13 +67,13 @@ 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: */ printLine("Sort With Backwards Closure E [Operator Functions]") -sortedCompany = company.sort(>) +sortedCompany = company.sorted(by: >) print(sortedCompany) sortedCompany = [] // Trailing Closure printLine("Sort With Backwards Closure F [Trailing Closure]") -sortedCompany = company.sort() { a, b in a > b} // 如果闭包参数是这个函数的最后一个参数,是可以采用尾随闭包写法 +sortedCompany = company.sorted() { a, b in a > b} // 如果闭包参数是这个函数的最后一个参数,是可以采用尾随闭包写法 //sortedCompany = company.sort { a, b in a > b} // 如果闭包参数是这个函数的唯一一个参数,是可以不用写括号的 print(sortedCompany) sortedCompany = [] @@ -110,7 +110,7 @@ print(digitString) printLine("Captuare Value") // 捕获值 -func makeIncrementer(step:Int) -> () -> Int { +func makeIncrementer(_ step:Int) -> () -> Int { var total = 0 func inc() -> Int { total += step @@ -132,12 +132,12 @@ print("ClosureFuncC:", closureFuncC()) // 逃逸&非逃逸闭包 printLine("Noescaping & Escaping Closesure") -func noescapingClosure(@noescape closure: () -> Void) { +func noescapingClosure(_ closure: () -> Void) { closure() } var closureHandler: Array<() -> Void> = [] -func escapingClosure(closure: () -> Void) { // 此时参数前加@noescape会报错 +func escapingClosure(_ closure: @escaping () -> Void) { // 此时参数前加@noescape会报错 closureHandler.append(closure) } @@ -161,7 +161,7 @@ printLine("AutoClosure") print("Now Company Items:", company) print("Company Item Count:", company.count) // autoClosureHanlerA的type是 () -> String 不是 String -let autoClosureHandlerA = { company.removeAtIndex(0) } // an autoclosure lets you delay evaluation +let autoClosureHandlerA = { company.remove(at: 0) } // an autoclosure lets you delay evaluation print("Company Item Count:", company.count) print("No Remove \(autoClosureHandlerA())") print("Company Item Count:", company.count) @@ -169,30 +169,30 @@ print("Company Item Count:", company.count) // autoclosure parameter printLine("AutoClosure Parameter") -func autoClosureFuncParameterA(closure: () -> String) { +func autoClosureFuncParameterA(_ closure: () -> String) { print("AutoClosureFuncParameterA \(closure())!") } -autoClosureFuncParameterA({ company.removeAtIndex(0) }) +autoClosureFuncParameterA({ company.remove(at: 0) }) -func autoClosureFuncParameterB(@autoclosure closure: () -> String) { +func autoClosureFuncParameterB(_ closure: @autoclosure () -> String) { print("AutoClosureFuncParameterB \(closure())!") } -autoClosureFuncParameterB(company.removeAtIndex(0)) +autoClosureFuncParameterB(company.remove(at: 0)) // @autoclosure 暗含了 noescape 特性 var autoClosureHanlder: [() -> String] = [] -func autoClosureFuncParameterC(@autoclosure closure: () -> String) { +func autoClosureFuncParameterC(_ closure: @autoclosure () -> String) { //因为参数被@autoclosure修饰了,而@autoclosure暗含@noescape特性,因此以下语句会报错 //autoClosureHanlder.append(closure) } // 如果用了@autoclosure又要用escape特性,则用@autoclosure(escaping)修饰参数 -func autoClosureFuncParameterD(@autoclosure(escaping) closure: () ->String) { +func autoClosureFuncParameterD( _ closure: @autoclosure @escaping () ->String) { print("Called autoClosureFuncParameterD") autoClosureHanlder.append(closure) } -autoClosureFuncParameterD(company.removeAtIndex(0)) -autoClosureFuncParameterD(company.removeAtIndex(0)) +autoClosureFuncParameterD(company.remove(at: 0)) +autoClosureFuncParameterD(company.remove(at: 0)) for handler in autoClosureHanlder { print("autoClosure Handling \(handler())!") diff --git a/learn/AcePlay/AcePlay.playground/Pages/Enumerations.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Enumerations.xcplaygroundpage/Contents.swift index 34b3a91..3ce322c 100644 --- a/learn/AcePlay/AcePlay.playground/Pages/Enumerations.xcplaygroundpage/Contents.swift +++ b/learn/AcePlay/AcePlay.playground/Pages/Enumerations.xcplaygroundpage/Contents.swift @@ -3,37 +3,37 @@ import UIKit enum CompassPoint { - case North - case East - case South - case West + case north + 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") - case .East : print("Where the Sun Rises") - case .South: print("Watch Out for Penguins") - case .West : print("Where the Skies are Blue") + case .north: print("Losts of Plantes Have a North") + case .east : print("Where the Sun Rises") + case .south: print("Watch Out for Penguins") + case .west : print("Where the Skies are Blue") } // Associated Values printLine("Enumeration Associated Values") enum BarCode { - case UPCA(Int, Int, Int, Int) - case QRCode(String) + case upca(Int, Int, Int, Int) + case qrCode(String) } -var productBarCode = BarCode.UPCA(8, 88488, 66366, 2) -productBarCode = .QRCode("QRCode-123456") +var productBarCode = BarCode.upca(8, 88488, 66366, 2) +productBarCode = .qrCode("QRCode-123456") switch productBarCode { -case let .UPCA(numberSystem, manufacturer, product, check) : +case let .upca(numberSystem, manufacturer, product, check) : print("UPC-A: \(numberSystem), \(manufacturer), \(product), \(check)") -case let .QRCode(productCode) : +case let .qrCode(productCode) : print("QR Code: \(productBarCode)") } @@ -41,26 +41,26 @@ case let .QRCode(productCode) : printLine("RawValues") // Raw Values enum ASCIIControlCharacter: Character { - case Tab = "\t" - case LineFeed = "\n" - case CarriageReturn = "\r" + case tab = "\t" + case lineFeed = "\n" + case carriageReturn = "\r" } // Implicitly Assigned Raw Values // 整型从0开始自增1,每个项的rawValue不能相同 enum Planet: Int { - case Mercury - case Venus - case Earth - case Mars - case Jupiter - case Saturn - case Uranus - case Netpune + case mercury + case venus + case earth + case mars + case jupiter + case saturn + case uranus + case netpune } -print(Planet.Mercury, Planet.Mercury.rawValue) -print(Planet.Mars, Planet.Mars.rawValue) +print(Planet.mercury, Planet.mercury.rawValue) +print(Planet.mars, Planet.mars.rawValue) print(Planet(rawValue: 5)!, Planet(rawValue: 5)!.rawValue) @@ -82,21 +82,21 @@ print(CompassPointString.West, CompassPointString.West.rawValue) printLine("Resursive Enumerations") // 不能忘记 indirect indirect enum Exp { - case Number(Int) - case Add(Exp, Exp) // indirect 也可以放在case语句之前 - case Mul(Exp, Exp) + case number(Int) + case add(Exp, Exp) // indirect 也可以放在case语句之前 + case mul(Exp, Exp) } -let exp = Exp.Mul(Exp.Add(Exp.Number(2), Exp.Number(5)), Exp.Number(7)) +let exp = Exp.mul(Exp.add(Exp.number(2), Exp.number(5)), Exp.number(7)) -func evaluateExp(exp: Exp) -> Int { +func evaluateExp(_ exp: Exp) -> Int { switch exp { - case let .Number(n): + case let .number(n): return n - case let .Add(a, b) : + case let .add(a, b) : return evaluateExp(a) + evaluateExp(b) - case let .Mul(a, b): + case let .mul(a, b): return evaluateExp(a) * evaluateExp(b) } } diff --git a/learn/AcePlay/AcePlay.playground/Pages/Functions.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Functions.xcplaygroundpage/Contents.swift index ebcfc6e..d248acc 100644 --- a/learn/AcePlay/AcePlay.playground/Pages/Functions.xcplaygroundpage/Contents.swift +++ b/learn/AcePlay/AcePlay.playground/Pages/Functions.xcplaygroundpage/Contents.swift @@ -14,7 +14,7 @@ Hello() printLine("Multiple Return Types") -func minMax(data:Array) -> (min:Int, max:Int)? { +func minMax(_ data:Array) -> (min:Int, max:Int)? { guard data.count > 0 else { return nil } @@ -43,7 +43,7 @@ func sameExternalParameterNames( ExName a: Int, ExName b: Int) -> Int { print(sameExternalParameterNames(ExName: 10, ExName: 20)) // 引用传参 -func swapTwoInts(inout a: Int, inout _ b: Int) -> Void { +func swapTwoInts(_ a: inout Int, _ b: inout Int) -> Void { let t: Int = a a = b b = t diff --git a/learn/AcePlay/AcePlay.playground/Sources/Utils.swift b/learn/AcePlay/AcePlay.playground/Sources/Utils.swift index ece3a6f..8c6499a 100644 --- a/learn/AcePlay/AcePlay.playground/Sources/Utils.swift +++ b/learn/AcePlay/AcePlay.playground/Sources/Utils.swift @@ -1,7 +1,7 @@ import UIKit public -func printLine(title: String) -> Void { +func printLine(_ title: String) -> Void { let line = String(format:"[%@]-----------------------------------", title) print(line) -} \ No newline at end of file +} diff --git a/learn/AcePlay/AcePlay.playground/Utils.remap b/learn/AcePlay/AcePlay.playground/Utils.remap new file mode 100644 index 0000000..2b2694d --- /dev/null +++ b/learn/AcePlay/AcePlay.playground/Utils.remap @@ -0,0 +1,7 @@ +[ + { + "file": "/Users/ace/workspace/acecode/learn/AcePlay/AcePlay.playground/Sources/Utils.swift", + "offset": 36, + "text": "_ ", + } +] diff --git a/learn/AcePlay/AcePlay.playground/contents.xcplayground b/learn/AcePlay/AcePlay.playground/contents.xcplayground index d6d3e1a..9140691 100644 --- a/learn/AcePlay/AcePlay.playground/contents.xcplayground +++ b/learn/AcePlay/AcePlay.playground/contents.xcplayground @@ -1,5 +1,5 @@ - + 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 ba649d1f6a0ca166f8e94b340263043004708176..83c223dd43a77d0ca64359149882678d75458905 100644 GIT binary patch literal 18345 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 I_s)v{1E;27G5`Po literal 15476 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 Ycgy!rGt$^CBGmXz4mEx^{cR@vKi`9gE&u=k delta 7214 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 + + + + + + + + diff --git a/learn/AppleSwift/AppleSwift/main.swift b/learn/AppleSwift/AppleSwift/main.swift index 15506f8..d02413e 100644 --- a/learn/AppleSwift/AppleSwift/main.swift +++ b/learn/AppleSwift/AppleSwift/main.swift @@ -37,15 +37,15 @@ var dict = [ "tencnet" : "CN" ] print(dict) -print(dict["apple"]) +print(dict["google"] ?? "default value") print(dict["apple"]!) // 创建空数组和空字典 var EmptyArray = [String]() var EmptyDict = [String:String]() // or -var EmptArrayWithNoType = [] -var EmptDictWithNoType = [:] +//var EmptArrayWithNoType = [] +//var EmptDictWithNoType = [:] for cp in arrayList { print(cp) @@ -141,8 +141,8 @@ print(" emojistr \(emojiStr) charactor count is \(emojiStr.characters.count)") s = "Prefix----Suffix" if s.hasPrefix("Prefix") && s.hasSuffix("Suffix") { - print(s.lowercaseString) - print(s.uppercaseString) + print(s.lowercased()) + print(s.uppercased()) } @@ -154,11 +154,11 @@ for i in 1...5 { IntArray += [0, -1, -2, -3, -4] IntArray[0] = 1024 IntArray[1..<4]=[999, 888, 777] -IntArray.insert(1, atIndex: 0) -IntArray.removeAtIndex(5) +IntArray.insert(1, at: 0) +IntArray.remove(at: 5) IntArray.removeLast() print(IntArray) -for (index, value) in IntArray.enumerate() { +for (index, value) in IntArray.enumerated() { print("Item \(index+1): \(value)") } @@ -167,7 +167,7 @@ var StringArray = [String]() StringArray.append("dd") StringArray = [] -var DoubleArray = [Double](count:3, repeatedValue:9.9) +var DoubleArray = [Double](repeating: 9.9, count: 3) for i in 1...5 { DoubleArray.append(Double(i)*1.1) } @@ -186,14 +186,14 @@ if SetA.contains(1) { print(SetA) } -for genre in SetA.sort() { +for genre in SetA.sorted() { print("\(genre)") } let oddSet:Set = [1, 3, 5, 7, 9] let evenSet:Set = [0, 2, 4, 6, 8] -print(oddSet.intersect(evenSet).sort()) // 交 -print(oddSet.union(evenSet).sort()) // 并 +print(oddSet.intersection(evenSet).sorted()) // 交 +print(oddSet.union(evenSet).sorted()) // 并 print(oddSet.hashValue) @@ -221,7 +221,7 @@ print(airports) airports["APL"] = nil // Delete print(airports) -if let removedValue = airports.removeValueForKey("DUB") { +if let removedValue = airports.removeValue(forKey: "DUB") { print("The removed airport's name is \(removedValue)") } else { print("The airports dictionary does not contain a value for DUB") diff --git a/learn/doc/mac_bash_profile b/learn/doc/mac_bash_profile index 63c5e21..591b4fb 100644 --- a/learn/doc/mac_bash_profile +++ b/learn/doc/mac_bash_profile @@ -3,7 +3,7 @@ HISTCONTROL=ignoreboth export PATH=/usr/local/sbin:$PATH -export PATH="$(brew --prefix homebrew/php/php56)/bin:$PATH" +#export PATH="$(brew --prefix homebrew/php/php56)/bin:$PATH" export PATH=/Users/Ace/.local/bin:$PATH export GOBIN=/Users/Ace/.local/bin export PATH=/Users/Ace/workspace/github/metasploit-framework:$PATH @@ -14,6 +14,7 @@ export PS1="\W\$ " alias ll='ls -lGh' alias ls='ls -Gh' alias rm='rm -rf' +alias cls='clear' alias grep='grep --color' alias egrep='egrep --color' alias msf='msfconsole' -- 2.44.0