From 62aa15afe99be3e4c7ef6da48ec9138eaade673a Mon Sep 17 00:00:00 2001 From: acevest Date: Tue, 7 Mar 2017 18:46:16 +0800 Subject: [PATCH] ... --- .../Functions.xcplaygroundpage/Contents.swift | 98 +++++++++++++++++- .../UserInterfaceState.xcuserstate | Bin 21215 -> 21477 bytes 2 files changed, 97 insertions(+), 1 deletion(-) diff --git a/learn/AcePlay/AcePlay.playground/Pages/Functions.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Functions.xcplaygroundpage/Contents.swift index 3dbad16..ca35bc2 100644 --- a/learn/AcePlay/AcePlay.playground/Pages/Functions.xcplaygroundpage/Contents.swift +++ b/learn/AcePlay/AcePlay.playground/Pages/Functions.xcplaygroundpage/Contents.swift @@ -85,7 +85,7 @@ func Sum(_ numbers: Int...) -> Int { 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) } @@ -104,3 +104,99 @@ swapTwoInts(&IntA, &IntB) print("IntA: \(IntA) IntB: \(IntB)") +// 函数类型 +func addFunc(_ a: Int, _ b: Int) -> Int { + print(#function) + return a+b +} + +func mulFunc(_ a: Int, _ b: Int) -> Int { + print(#file, #function, #line) + return a*b +} + + +var someMathFunc: (Int, Int) -> Int +someMathFunc = addFunc +someMathFunc(1, 2) + +someMathFunc = mulFunc +someMathFunc(1, 2) + + +typealias MathFuncType = (Int, Int) -> Int +func printMathFuncResult(_ mathFunc: MathFuncType, _ a: Int, _ b: Int) -> Void { + print("Result: \(mathFunc(a, b))") +} + +printMathFuncResult(addFunc, 3, 4) +printMathFuncResult(mulFunc, 3, 4) + + + +// 函数类型作为返回值 +typealias StepFuncType = (inout Int) -> Int + +func stepForward(_ input: inout Int) -> Int { + input += 1 + print("step forward to \(input)") + return input +} + +func stepBackward(_ input: inout Int) -> Int { + input -= 1 + print("step backward to \(input)") + return input +} + +func chooseStepFunc(forward: Bool) -> StepFuncType { + if(forward) { + return stepForward + } + + return stepBackward +} + +var currentValue = Int(arc4random_uniform(20)) +print("current value: \(currentValue)") +while currentValue != 10 { + let moveTo: StepFuncType = chooseStepFunc(forward: currentValue < 10) + _ = moveTo(¤tValue) +} + + +func getRandomInt(_ n: UInt32) -> Int { + var r: Int = Int(arc4random_uniform(n)) + r *= arc4random_uniform(2) == 0 ? -1 : 1 + return r; +} + +// 嵌套函数 +func chooseStepFuncV2(forward: Bool) -> (inout Int) -> Void { + func stepForwardV2(_ input: inout Int) -> Void { + input += 1 + print("step forward to \(input)") + } + + func stepBackwardV2(_ input: inout Int) -> Void { + input -= 1 + print("step backward to \(input)") + } + + if forward { + return stepForwardV2 + } + + return stepBackwardV2 +} + +currentValue = getRandomInt(10) +print("current value: \(currentValue)") +while currentValue != 0 { + let moveTo = chooseStepFuncV2(forward: currentValue < 0) + moveTo(¤tValue) +} + + + + 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 3a2a549e8ecf7e0e8fd4615ed1efa6c4f8cb5e5e..fa0d0147ea01c7f18ee998865ac38ad45643b67f 100644 GIT binary patch delta 10940 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 -- 2.47.0