函數(shù)是一個(gè)組織在一起語句集合,以執(zhí)行特定任務(wù)。Swift 函數(shù)類似于簡單 C 函數(shù)以及復(fù)雜的 Objective C 語言函數(shù)。 它使我們能夠通過函數(shù)調(diào)用內(nèi)部的局部和全局參數(shù)值。 像其他任何語言一樣 swift 函數(shù)也遵循相同的步驟。
函數(shù)聲明:它告訴編譯器有關(guān)的函數(shù)的名稱,返回類型和參數(shù)。
函數(shù)定義:它提供函數(shù)的實(shí)際主體。
Swift 函數(shù)包含參數(shù)類型和返回類型。
在Swift 語言中函數(shù)是由 “func” 關(guān)鍵字來定義。當(dāng)一個(gè)新定義函數(shù)時(shí),它可能需要一個(gè)或幾個(gè)值作為函數(shù)輸入作為“參數(shù)” ,它將被處理在函數(shù)體中并傳回值作為 '返回類型' 輸出。
每個(gè)函數(shù)都有一個(gè)函數(shù)名,它描述了函數(shù)將執(zhí)行的任務(wù)。要使用函數(shù),需要調(diào)用其名字函數(shù),并通過它的輸入值(稱為參數(shù))匹配函數(shù)的參數(shù)類型。函數(shù)參數(shù)也被稱為“元組”。
函數(shù)的參數(shù)必須提供與函數(shù)參數(shù)列表的順序相同,并返回一個(gè)值在 -> 之后。
Syntax:
func funcname(Parameters) -> returntype
{
Statement1
Statement2
---
Statement N
return parameters
}
學(xué)生們的名字被聲明為函數(shù)“student” ,函數(shù)內(nèi)部聲明字符串作為返回?cái)?shù)據(jù)類型,當(dāng)調(diào)用該函數(shù)將返回學(xué)生姓名。
func student(name: String) -> String { return name } println(student("First Program")) println(student("About Functions"))
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
First Program About Functions
考慮下面的例子是一個(gè)用來顯示數(shù)字的“display”函數(shù),首先用參數(shù) “no1” 初始化且持整數(shù)數(shù)據(jù)類型。 然后參數(shù) “no1” 被分配給參數(shù) “a”,指向相同的數(shù)據(jù)類型的整數(shù)。 現(xiàn)在參數(shù) a 被返回給函數(shù)。這里 display()函數(shù)將持有整數(shù)值,每調(diào)用函數(shù)一次,返回整數(shù)值。
func display(no1: Int) -> Int { let a = no1 return a } println(display(100)) println(display(200))
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
100 200
Swift 提供了靈活的函數(shù)參數(shù)和返回值,從簡單到復(fù)雜的值。類似于 C 和 Objective C 函數(shù)也可以有多種形式
函數(shù)是通過其參數(shù)值傳到函數(shù)體訪問。我們可以通過單一到多元的參數(shù)值作為元組傳到函數(shù)內(nèi)部。
func mult(no1: Int, no2: Int) -> Int { return no1*no2 } println(mult(2,20)) println(mult(3,15)) println(mult(4,30))
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果:
40 45 120
我們可能使用包含函數(shù)不帶任何參數(shù)。
func funcname() -> datatype { return datatype }
以下是不帶參數(shù)函數(shù)的一個(gè)例子:
func votersname() -> String { return "Alice" } println(votersname())
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
Alice
函數(shù)也可用于返回字符串,整數(shù)和浮點(diǎn)數(shù)據(jù)類型值來作為返回類型。要找出數(shù)組函數(shù) “ls” 的最大和最小的數(shù),用large,small 整數(shù)數(shù)據(jù)類型聲明。
數(shù)組初始化為持有整數(shù)值。然后數(shù)組被處理并將數(shù)組中的每一個(gè)值讀出并寫其先前的值比較。當(dāng)該值比前一個(gè)存儲(chǔ)在“small”的參數(shù)更小,否則存儲(chǔ)在 “large” 的參數(shù)值通過調(diào)用函數(shù)返回
func ls(array: [Int]) -> (large: Int, small: Int) { var lar = array[0] var sma = array[0] for i in array[1..<array.count] { if i < sma { sma = i } else if i > lar { lar = i } } return (lar, sma) } let num = ls([40,12,-5,78,98]) println("Largest number is: \(num.large) and smallest number is: \(num.small)")
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
Largest number is: 98 and smallest number is: -5
某些函數(shù)可能在函數(shù)中聲明參數(shù),但沒有任何返回值。下面的程序聲明 a 和 b 作為參數(shù)傳遞給 sum()函數(shù)。函數(shù)內(nèi)部本身的參數(shù) a 和 b 的值是通過調(diào)用所述函數(shù)通過調(diào)用 sum(),其值被打印從而不用返回相關(guān)值。
func sum(a: Int, b: Int) { let a = a + b let b = a - b println(a, b) } sum(20, 10) sum(40,10) sum(24,6)
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
(30, 20) (50, 40) (30, 24)返回 Optional 類型的函數(shù)
Swift 推出 “optional” 特性以通過引入一個(gè)安全對策來消除問題。 例如,考慮我們聲明函數(shù)值返回類型為整數(shù),但當(dāng)函數(shù)返回一個(gè)字符串值或任何一個(gè)零值,會(huì)怎么樣? 在這種情況下,編譯器會(huì)返回錯(cuò)誤值。 “optional” 引入以擺脫這些問題。
可選(Optional )功能將采取兩種形式 'value' 和 'nil'。我們會(huì)提到 'Optionals' 使用鍵保留字符 “?” 檢查元組是否返回一個(gè)值或零值。
func minMax(array: [Int]) -> (min: Int, max: Int)? { if array.isEmpty { return nil } var currentMin = array[0] var currentMax = array[0] for value in array[1..<array.count] { if value < currentMin { currentMin = value } else if value > currentMax { currentMax = value } } return (currentMin, currentMax) } if let bounds = minMax([8, -6, 2, 109, 3, 71]) { println("min is \(bounds.min) and max is \(bounds.max)") }
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
min is -6 and max is 109
'Optionals'被用來檢查 'nil' 或垃圾值,從而消耗大量的時(shí)間調(diào)試,使代碼的效率和可讀性的用戶。
局部參數(shù)名稱僅在函數(shù)內(nèi)部訪問。
func sample(number: Int) { println(number) }
這里 func 示例參數(shù)數(shù)量被聲明為內(nèi)部變量,因?yàn)樗怯珊瘮?shù) sample() 內(nèi)部訪問。在這里,“number” 被聲明為局部變量,但下面的語句引用變量可使用函數(shù)外部。
func sample(number: Int) { println(number) } sample(1) sample(2) sample(3)
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
1 2 3
外部參數(shù)名稱允許命名一個(gè)函數(shù)參數(shù),使它們的目的更加明確。 命名兩個(gè)函數(shù)的參數(shù),然后調(diào)用該函數(shù)如下
func pow(firstArg a: Int, secondArg b: Int) -> Int { var res = a for _ in 1..<b { res = res * a } println(res) return res } pow(firstArg:5, secondArg:3)
當(dāng)我們使用 playground 運(yùn)行上面的程序,得到以下結(jié)果
125
當(dāng)我們想定義具有多個(gè)數(shù)量參數(shù)的函數(shù), 那么我們可以聲明成員為 “可變參數(shù)” 的參數(shù)。參數(shù)可以被指定為可變參數(shù)由(...)的參數(shù)名稱之后。
func vari<N>(members: N...){ for i in members { println(i) } } vari(4,3,5) vari(4.5上一篇:Swift計(jì)算屬性下一篇:Swift標(biāo)識(shí)符模式