swift語(yǔ)言中函數(shù)是一個(gè)重要的概念奈揍,今天主要談?wù)撓潞瘮?shù)的相關(guān)知識(shí):
函數(shù)基礎(chǔ):
先看一段代碼:
func printName() {
print("My name is Galloway")
}
printName()
這段代碼前三行是聲明了一個(gè)函數(shù)求橄,最后一行是執(zhí)行這段函數(shù)钮莲,聲明函數(shù)的時(shí)候使用關(guān)鍵字func,之后是函數(shù)名袜啃,在花括號(hào)中是整個(gè)函數(shù)體汗侵。
下面再看一段代碼:
func printMultipleOf(multiplier: Int, andValue: Int) {
print("\(multiplier) * \(andValue) = \(multiplier * andValue)")
}
printMultipleOf(4, andValue: 2)
很明顯,這段代碼中也聲明了一個(gè)函數(shù)群发,但區(qū)別是這個(gè)函數(shù)帶有2個(gè)參數(shù)晰韵,函數(shù)中的參數(shù)可以稱為參數(shù)列表,參數(shù)中的格式為:參數(shù)名:參數(shù)類型
上面這段代碼同樣可以改為:
func printMultipleOf(multiplier: Int, and andValue: Int) {
print("\(multiplier) * \(andValue) = \(multiplier * andValue)")
}
printMultipleOf(4, and: 2)
這里第二個(gè)參數(shù)改為:參數(shù)名1 參數(shù)名2: 參數(shù)類型熟妓。這種寫法表示參數(shù)名1用于外部調(diào)用函數(shù)時(shí)使用雪猪,參數(shù)名2用于函數(shù)內(nèi)部實(shí)現(xiàn)時(shí)使用,可以有利于函數(shù)的復(fù)用起愈。
繼續(xù)看一段代碼:
func printMultipleOf(multiplier: Int, _ andValue: Int) {
print("\(multiplier) * \(andValue) = \(multiplier * andValue)")
}
printMultipleOf(4, 2)
這里第二個(gè)參數(shù)設(shè)置為:_ 參數(shù)名2: 參數(shù)類型只恨。這樣就表示調(diào)用這個(gè)函數(shù)的時(shí)候不需要指定名字。
func printMultipleOf(multiplier: Int, _ andValue: Int = 1) {
print("\(multiplier) * \(andValue) = \(multiplier * andValue)")
}
printMultipleOf(4)
printMultipleOf(4,2)
這段代碼設(shè)置了第二個(gè)參數(shù)的默認(rèn)值為1.
上面這段代碼是沒有返回值的抬虽,下面看下有返回值的代碼:
func multiply(number: Int, by byValue: Int) -> Int {
return number * byValue
}
let mulresult = multiply(4, by: 2)
返回值的類型在 ->后官觅,這段函數(shù)的返回值類型是Int型,return后面是返回值阐污。
下面再看一段代碼:
func multiplyAndDivide(number: Int, by byValue: Int) -> (multiply: Int, divide: Int) {
return (number * byValue, number / byValue)
}
let mulresult = multiplyAndDivide(4, by: 2)
let multiply = mulresult.multiply
let divide = mulresult.divide
這段代碼返回了一個(gè)元組(tuples)休涤。
繼續(xù)看一段代碼:
unc incrementAndPrint(inout value: Int) {
value += 1
print(value)
}
var value = 5
incrementAndPrint(&value)
這里使用inout關(guān)鍵字來進(jìn)行引用參數(shù)傳遞。
函數(shù)同樣可以作為變量來使用笛辟,和基本的數(shù)據(jù)類型一樣
看下面這段代碼:
func add(a:Int, _ b: Int) -> Int {
return a + b
}
var function: (Int, Int) -> Int = add
let result = function(4,2)
這段代碼就是將函數(shù)作為變量功氨,使用起來是和基本的數(shù)據(jù)類型一致序苏。
func substract(a: Int, _ b: Int) -> Int {
return a-b
}
function = substract
result = function(4,2)
因?yàn)轭愋褪且恢碌模瑯涌梢园裺ubtract賦值給function疑故。
func printResult(function: (Int,Int) -> Int, _ a: Int, _ b: Int) {
let result = function(a,b)
print(result)
}
printResult(add, 8, 7)
這里function函數(shù)作為printResult函數(shù)的一個(gè)參數(shù)杠览,輸出的結(jié)果為15弯菊。
下面是兩個(gè)練習(xí):
1纵势、
func isNumberDivisible(number: Int, by byNumber: Int) -> Bool {
if number % byNumber == 0 {
return true
} else {
return false
}
}
func isPrime(number: Int) -> Bool {
if number >= 0 {
for i in 2...Int(sqrt(Double(number))) {
if isNumberDivisible(number, by: i) {
return false
}
}
return true
} else {
return false
}
}
isPrime(18653)
判斷一個(gè)數(shù)是否是素?cái)?shù)
2、
func fibonacci(number: Int) -> Int {
if number == 1 || number == 2 {
return 1
} else {
return fibonacci(number-2) + fibonacci(number-1)
}
}
fibonacci(1)
fibonacci(2)
fibonacci(3)
fibonacci(4)
fibonacci(5)
fibonacci(9)
fibonacci(19)
fibonacci(1876)
計(jì)算Fibonacci數(shù)列