一 定義
//有返回值
func name(a: Int,b: Int) -> return type {
function body
}
//無(wú)返回值
func name() {
function body
}
//可選返回值
func somef() -> Int? {
}
二 外部參數(shù)名
就是調(diào)用時(shí)候的參數(shù)名稱(chēng)和函數(shù)內(nèi)部使用時(shí)候的名稱(chēng)不同偏序,但是同一變量。
省略情況下咧叭,外部和內(nèi)部用同一個(gè)名字葱跋。
//這個(gè)from是外部參數(shù)名,hometown是內(nèi)部名
func someFunction(name: String,form hometown: String) {
print("\(name) 來(lái)自 \(hometown)");
}
someFunction(name: "aa", form: "china")
三 忽略參數(shù)名
//正常情況
func someFunction(name: String,hometown: String) {
}
someFunction(name: "cluo", hometown: "putaoya")
//忽略參數(shù)名的情況
func someFunction2(_ name: String,hometown: String) {
}
//主要區(qū)別在這里第一個(gè)參數(shù)沒(méi)有name字樣了崔步。
someFunction2("meixi", hometown: "agenting")
注意:如果沒(méi)有接收函數(shù)的返回值稳吮,會(huì)得到一個(gè)警告。通過(guò)在函數(shù)上面添加@discardableResult可以去除警告
四 忽略返回值
func printAntCount(string: String) -> Int {
print(string);
return string.count;
}
//swift中如果沒(méi)有使用函數(shù)的返回值井濒,會(huì)得到一個(gè)警告灶似。使用_消除警告列林。
let _ = printAntCount(string: "hello ,world")
五 多個(gè)返回值
//其實(shí)就是返回元組類(lèi)型
func mainMax(array: [Int]) -> (min: Int,max: Int) {
var currentMin = array[0];
var currentMax = array[0];
for value in array {
if value < currentMin {
currentMin = value;
} else if value > currentMax {
currentMax = value;
}
}
return (currentMin,currentMax);
}
let testArr = [1,10,5];
print(mainMax(array: testArr));
六 默認(rèn)參數(shù)值
//paramb不傳的時(shí)候默認(rèn)10
func someFunction(parama: Int,paramb: Int = 10) -> Int {
return parama + paramb;
}
print(someFunction(parama: 2,paramb: 5));
print(someFunction(parama: 2));
七 可變參數(shù)
//可變參數(shù)
func pingJunZhi(numbers: Double...) -> Double {
var totla: Double = 0;
for number in numbers {
totla += number;
}
return totla / Double(numbers.count);
}
print(pingJunZhi(numbers: 1,2,3,4,5));
八 輸入輸出參數(shù)
//swift中默認(rèn)情況下函數(shù)的參數(shù)都是常量(即:不可以修改),這是swift為了避免在函數(shù)內(nèi)部不小心修改了函數(shù)外部變量.
//但是有時(shí)候確實(shí)需要修改外部變量的時(shí)候酪惭,聲明時(shí)候需要在參數(shù)類(lèi)型前面加關(guān)鍵字 inout. 并且調(diào)用時(shí)候參數(shù)前加 &
var a = 10;
//聲明時(shí)加 inout
func change(param: inout Int) {
param = 12;
}
//調(diào)用時(shí)加 &
change(param: &a);
print(a);
九 函數(shù)類(lèi)型
swift的每個(gè)函數(shù)都有種特定的函數(shù)類(lèi)型希痴,函數(shù)的類(lèi)型由函數(shù)的參數(shù)類(lèi)型和返回類(lèi)型組成。
如:下面這個(gè)addTwoNumers函數(shù)的類(lèi)型是:
(Int, Int) -> Int 這個(gè)類(lèi)型和 Int春感,String等類(lèi)型是一樣的砌创,可以用來(lái)定義變量,定義函數(shù)的參數(shù)類(lèi)型鲫懒,作為函數(shù)的返回類(lèi)型嫩实。
func addTwoNumers(a: Int,b: Int) -> Int {
return a + b;
}
//定義函數(shù)類(lèi)型變量
var matchFunction: (Int,Int)->Int;
matchFunction = addTwoNumers(a:b:);
//定義函數(shù)參數(shù)類(lèi)型
func otherFunction(f: (Int,Int)->Int,parama: Int,paramb: Int) -> Int {
return f(parama,paramb);
}
let res = otherFunction(f: matchFunction, parama: 2, paramb: 4);
//作為函數(shù)返回類(lèi)型
func stepForward(_ input: Int) -> Int {
return input + 1
}
func stepBackward(_ input: Int) -> Int {
return input - 1
}
func chooseStepFunction(backward: Bool) -> (Int) -> Int {
return backward ? stepBackward : stepForward
}
//嵌套函數(shù)
func chooseStepFunction(backward: Bool) -> (Int) -> Int {
func stepForward(input: Int) -> Int { return input + 1 }
func stepBackward(input: Int) -> Int { return input - 1 }
return backward ? stepBackward : stepForward
}