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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 delta 10544 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