SWIFT 3. Function
Single Return value
func testFunc (count: Int, val: String) -> String {
return "\(val) = \(count)"
}
No Return value
func testFunc (count: Int, val: String) {
print("\(val) = \(count)")
}
Multi-return value
func testFunc (count: Int, val: String) -> (name:String, tel:string) {
return ("AAA", "12345678")
}
Arguments
//多參數呼叫方式
func add(a:Int, b:Int) -> Int {
return a+b
}
add(10, b:11) //第二個參數之後, 一定要加參數名
//外部別名, a的外部別名為num1, b的外部別名為num2
func add(num1 a:Int, num2 b:Int) -> Int {
return a+b
}
add(10, num2:11) //使用外部別名呼叫func
//忽略外部別名, 使用底線 _
func add(a:Int, _ b:Int, _ c : Int) -> Int {
return a+b+c
}
add(10, 11, 12) //參數一原本就不需要別名
//預設參數值
func add(a:Int, _ b:Int, _ c : Int = 10) -> Int {
return a+b+c
}
add(10, 11, 12)
add(10, 11) //c自動以10帶入
//可變參數, 不能有回傳值, 最多只能有一個可變參數
func spendMoney(val: Int...) {
for vv in val {
print("\(vv)")
}
}
spendMoney()
spendMoney(10, 15, 30)
//變數參數 (未指定者為常數參數), 在參數名前加上var
func add(var a: Int, b:Int) ->Int {
a = a + b
return a
}
// In-Out參數, 在參數名前加上inout, 呼叫時, 在變數名前要加&
finc addOne(inout a: Int) {
a++
}
addOne(&tmp) //tmp++
Func as Type
//可將一個func視為一個type, 以進行一般性的操作
func add(a: Int, b:Int) -> Int {
return a+b
}
func multiply(a: Int, b:Int) -> Int {
return a+b
}
var myFunc = add //宣告myFunc為add
var b = myFunc(1,2) // b = 1+2=3
myFunc = multiply //指派myFunc為multiply
b = myFunc(1,2) // b = 1*2=2
//可將func當作另一func的參數
func printFunc(myAct (Int, Int) -> Int, a:Int, b:Int) {
print("Result = \(myAct(a,b))")
}
printFunc(myFunc, 10, 6) //呼叫printFunc, 並將myFunc傳入, swift只會檢查傳入func的參數是否一致
//可將func做為回傳值
func getFunc(flag:Bool) -> (Int, Int) -> Int {
return flag? add:multiply
}
let retFunc = getFunc(true) //Call getFunc to get "add" and assign to retFunc
retFunc(10, 15) //means to call "add(10, 15)"
//Nested Functions : Func in Func, 無法直接呼叫
func getFunc2(flag:Bool) -> (Int, Int) -> Int {
func f1(a:Int, b:Int) -> Int {
return a+b
}
func f2(a:Int, b:Int) -> Int {
return (a+b) *2
}
return flag?f1:f2
}
//不能直接呼叫getFunc2內的f1與f2
let retFunc2 = getFunc2(false) //retFunc2會指向getFunc2內f2
let cc = retFunc2(10, 11) //cc = 42
- Felix Lai