From 886596afcfe703e15c570775cf5ed0e5733b32a5 Mon Sep 17 00:00:00 2001 From: AceVest Date: Tue, 7 Mar 2017 00:02:04 +0800 Subject: [PATCH] ... --- .../Contents.swift | 148 +++++++++++++++++- .../Functions.xcplaygroundpage/Contents.swift | 52 +++++- .../UserInterfaceState.xcuserstate | Bin 20112 -> 21215 bytes 3 files changed, 197 insertions(+), 3 deletions(-) diff --git a/learn/AcePlay/AcePlay.playground/Pages/ControlFlow.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/ControlFlow.xcplaygroundpage/Contents.swift index 781d883..a52af6a 100644 --- a/learn/AcePlay/AcePlay.playground/Pages/ControlFlow.xcplaygroundpage/Contents.swift +++ b/learn/AcePlay/AcePlay.playground/Pages/ControlFlow.xcplaygroundpage/Contents.swift @@ -63,7 +63,9 @@ case 0: case 1..<5: naturalCount = "a few" case 5: - fallthrough // 默认不走到下一个case + // 默认不走到下一个case + // fallthrough关键字不会检查它下一个将会落入执行的 case 中的匹配条件 + fallthrough case 6..<12: naturalCount = "several" case 12..<100: @@ -74,4 +76,146 @@ default: naturalCount = "many" } -print("There are \(naturalCount) \(countedTings) [\(approximateCount)]") \ No newline at end of file +print("There are \(naturalCount) \(countedTings) [\(approximateCount)]") + + +var x = Int(arc4random_uniform(100)) +var y = Int(arc4random_uniform(100)) +let s = arc4random_uniform(4) + +if s & 1 != 0 { + x = -x +} + +if s & 2 != 0 { + y = -y +} + +let somePoint = (x, y) + +switch somePoint { +case (0, 0) : + print("(0, 0) is at the origin") + +case (_, 0) : + print("(\(x), 0) is on the x-axis") + +case (0, _) : + print("(0, \(y)) is on the y-axis") + +case (-50...50, -50...50) : + print("(\(x), \(y)) is inside the box") + +default: + print("(\(x), \(y)) is outside the box") +} + + +// 值绑定 和 where 语句 +switch somePoint { +case (let x, 0) : + print("on the x-axis with a x value of \(x)") + +case (0, let y) : + print("on the y-axis with a y value of \(y)") + +case let (x, y) where x == y : + print("(\(x), \(y)) is on the line x = y") + +case let (x, y) where x == -y : + print("(\(x), \(y)) is on the line x = -y") + +case let (x, y) : + print("somewhere else at (\(x), \(y))") +} + +let alphabet = "abcdefghijklmnopqrstuvwxyz" +let rc = alphabet[alphabet.index(alphabet.startIndex, offsetBy: String.IndexDistance(arc4random_uniform(UInt32(alphabet.characters.count))))] + +// 复合匹配 +switch rc { +case "a", "e", "i", "o", "u" : + print("\(rc) is a vowel") +case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", + "p", "q", "r", "s", "t", "v", "w", "x", "y", "z" : + print("\(rc) is a consonant") +default: + print("\(rc) is not a vowel or a consonant") +} + +switch somePoint { +case (let distance, 0), (0, let distance) : + print("On an axis, \(distance) from the origin") +default : + print("Not on an axis") +} + + + +let finalSquare = 25 +var board = [Int](repeating:0, count: finalSquare + 1) + +board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02 +board[04] = -10; board[19] = -11; board[22] = -02; board[24] = -08 + + +var diceRoll = 0 +var square = 0 + +gameLoop: while square != finalSquare { + diceRoll += 1 + + diceRoll %= 6 + diceRoll += 1 + + switch diceRoll { + case finalSquare: + break gameLoop // break 会执行gameLoop标签的后一条代码也就是print("Game Over") + case let newSquare where square > finalSquare: + continue gameLoop // continue 会执行gameLoop标签指示的代码 + default: + square += 1 + diceRoll += board[square] + } +} + +print("Game Over") + + + +// guard +func greet(person: [String:String]) { + guard let name = person["name"] else { // guard 总是要跟一个 else + print("please specify the person's name") + return // guard 代码体最终必须要退出函数 + } + + print("Hello \(name)") + + guard let location = person["location"] else { + print("please specify \(name)'s location") + return + } + + print("I hope the weather is nice in \(location)") + + if #available(iOS 10, macOS 11.12, *) { // 指定代码版本 也可用于 guard 语句 + print("that's right platform") + } else { + print("invalid platform") + } + + guard #available(iOS 99, *) else { + print("Under iOS 99 now") + return + } +} + +greet(person: ["noname" : "noname"]) +greet(person: ["name" : "Ace"]) +greet(person: ["name" : "AceVest", "location":"moon"]) + + + + + diff --git a/learn/AcePlay/AcePlay.playground/Pages/Functions.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Functions.xcplaygroundpage/Contents.swift index d248acc..3dbad16 100644 --- a/learn/AcePlay/AcePlay.playground/Pages/Functions.xcplaygroundpage/Contents.swift +++ b/learn/AcePlay/AcePlay.playground/Pages/Functions.xcplaygroundpage/Contents.swift @@ -7,12 +7,19 @@ func Hello() -> Void { // func Hello() -> () { } print("Hello Swift World") } +func greetFunc(person: String) -> String { + let greeting = "Hello \(person)!" + return greeting +} + printLine("Functions") Hello() +print(greetFunc(person: "Ace")) +print(greetFunc(person: "AceVest")) -printLine("Multiple Return Types") +printLine("Multiple Return Types") // 多重返回 func minMax(_ data:Array) -> (min:Int, max:Int)? { guard data.count > 0 else { @@ -36,6 +43,48 @@ if let ret = minMax(Data) { print("Min:", ret.min, " Max:", ret.max) } + +// 参数标签 +// 每个参数都有一个参数标签(argument label)和一个参数名称(parameter name) +// 参数标签在调用函数的时候使用,调用的时候需要把函数的参数标签写在参数的前面 +// 参数名称在实现函数的时候使用 +// 参数标签要在参数名称前指定,中间以空格分隔 +// 如果一个参数有一个标签,那么在调用的时候必须使用标签来标记这个参数 +func greetFuncV2(person: String, from hometown: String) -> Void { + print("Hello \(person), Glad you could visit from \(hometown).") +} + +greetFuncV2(person: "Ace", from: "China") + + +// 忽略参数标签 +func greetFuncV3(_ person: String) -> Void { + print("Hello \(person)") +} + +greetFuncV3("Ace") // 不用在参数列表里写上'person:"Ace"' + +// 默认参数值 +func greetFuncV4(_ person: String, from hometown:String = "China") { + print("Hello \(person), Glad you could visit from \(hometown).") +} + +greetFuncV4("Ace") +greetFuncV4("Obama", from: "USA") + +// 可变参数 +// 一个函数最多只能拥有一个可变参数 +func Sum(_ numbers: Int...) -> Int { + var s = 0; + for n in numbers { + s += n + } + + return s +} + +print(Sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) + // 外部参数包能相同, 但内部参数名不能相同 func sameExternalParameterNames( ExName a: Int, ExName b: Int) -> Int { return max(a, b) @@ -52,5 +101,6 @@ func swapTwoInts(_ a: inout Int, _ b: inout Int) -> Void { var IntA = 10 var IntB = 20 swapTwoInts(&IntA, &IntB) +print("IntA: \(IntA) IntB: \(IntB)") 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 35670e3b0b715ecb0994f30d1d0ef34db86ec9b2..3a2a549e8ecf7e0e8fd4615ed1efa6c4f8cb5e5e 100644 GIT binary patch literal 21215 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