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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 literal 15476 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 N|Ea6|fB&D^`9G+xtSSHi diff --git a/learn/AppleSwift/AppleSwift.xcodeproj/project.pbxproj b/learn/AppleSwift/AppleSwift.xcodeproj/project.pbxproj index c288f4c..fced780 100644 --- a/learn/AppleSwift/AppleSwift.xcodeproj/project.pbxproj +++ b/learn/AppleSwift/AppleSwift.xcodeproj/project.pbxproj @@ -95,6 +95,7 @@ TargetAttributes = { 5063B2A11B390AAF009C5821 = { CreatedOnToolsVersion = 6.3.2; + LastSwiftMigration = 0810; }; }; }; @@ -209,6 +210,7 @@ isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -216,6 +218,7 @@ isa = XCBuildConfiguration; buildSettings = { PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 3.0; }; name = Release; }; diff --git a/learn/AppleSwift/AppleSwift.xcodeproj/project.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate b/learn/AppleSwift/AppleSwift.xcodeproj/project.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate index d2eabf626f060670834e1ba0c3c2233a90568b56..bb26f9734b72b24ab42034dd4560642fa9ed7102 100644 GIT binary patch delta 8881 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 delta 7214 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 C5@j6# diff --git a/learn/AppleSwift/AppleSwift.xcodeproj/xcuserdata/Ace.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/learn/AppleSwift/AppleSwift.xcodeproj/xcuserdata/Ace.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..7a7ffc6 --- /dev/null +++ b/learn/AppleSwift/AppleSwift.xcodeproj/xcuserdata/Ace.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,21 @@ + + + + + + + + + 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.47.0