6 函數swift
函數就是對某個功能的封裝,一個swift程序可能由多個函數組成數組
swift中定義函數的格式:模塊化
func 函數名稱(參數列表) —>函數返回值類型{函數
函數體spa
return 排序
}生命週期
函數定義要素:內存
func 是定義函數的關鍵字作用域
函數名名字:爲了加強可讀性,函數的名稱只能用字母字符來命名,函數名稱以駝峯式命名法來命名get
參數列表:能夠帶多個參數,也能夠沒有參數
若是帶有多個參數,格式爲:參數名稱:類型標註,參數名稱:類型標註…
若是函數帶有多個參數,調用函數的時候,向函數傳遞的數據,類型必需要和定義參數的類型徹底對應
函數返回值類型:只要是Swift語言識別的類型,均可以做爲函數的返回值類型
若是函數具備返回值,返回的內容用return語句返回
return語句後面能夠添加變量或者表達式
若是函數不具備返回值,return語句能夠缺省
有如下三種寫法:
一、 ->返回值類型 同時缺省
二、寫成 ->()
三、寫成 ->Void
函數優勢:
讓代碼更具備模塊化,提升代碼的可讀性
讓代碼更容易修改和維護
加強代碼的複用性
無返回值,無參數函數
func printLine() -> String{
return 「—————-」
}
print(printLine())
例子1:求取a + b的和,a = 10,b = 20
func sumNumber(){
let a = 10
let b = 20
print(a + b)
}
sumNumber() //調用函數
MARK
*函數只有在調用的時候纔會爲函數中的變量和常量分配空間
*函數若是一直沒有被調用,和沒有定義同樣,函數裏的變量或常量都不佔內存
*函數體重定義的常量和變量,生命週期從函數調用開始,到函數調用結束爲止,做 用域只在函數體內
* 向例子1中定義的變量或者常量,咱們稱爲局部變量或者局部常量
*全局變量的做用域,從定義位置開始,到下面的全部函數都能直接使用這個所有變量
帶參數,無返回值函數
函數的參數默認爲隱式常量,在函數內部不能進行賦值操做,函數形參的做用只是用來接收調用函數時傳遞過來的數值
例子2:
func sumAAndB(a:Int,b:Int){
a + b
}
sumAAndB(10,b:20) //調用函數
例子3:判斷從鍵盤輸入的字符是否爲十六進制的合法字符
func isNum(b: String){
if b.characters.count == 1{
let b = b[b.startIndex]
if b >= "0" && b <= "9" || b >= "a" && b <= "f" || b >= "A" && b <= "F"{
print("這個數是十六進制的字符")
}else{
print("這個數不是十六進制的字符")
}
}else{
print("不合法")
}
}
isNum(「k」)
函數參數爲多個不定項數據
若是函數參數個數不定,可使用…格式來接收多個數據,至關於接收一個數組
參數位置不定數據的參數只能定義一個
不定數據放在全部參數後面定義
例子4:
func getMoreNumber(num:Int…){
for i in num{
print(i)
}
}
getMoreNumber(1,2,3) //調用函數
1
2
3 //打印結果
帶參數,有返回值函數
例子5:
func sayGoodBye(personName: String,isSay: Bool) ->String{
if isSay{
return "咱們已經認識了"
}else{
return sayHello(personName)
//函數遇到return語句就結束了,return後面的內容不會被執行
}
}
print(sayGoodBye("Kil", isSay: false))
若是函數的返回值存在不肯定值,那麼函數就要將返回值類型定義成可選類型:Int?返回值返回的爲nil
例子6:
func divNum(a: Int,b: Int) -> Int?{
if b != 0{
return a / b
}else{
return nil
}
}
print(divNum(4, b: 0))
函數內部實現改變函數外部參數的值
定義函數時的參數稱爲形參,函數調用傳遞的參數,稱爲實參,inout參數實現了形參的值能被修改的功能
例子7:交換兩個數的值
func swap(inout a: Int,inout b: Int){
let tmp = a
a = b
b = tmp
}
var m = 10
var n = 30
swap(&m, b: &n)
print(m,n)
實參向形參傳遞數值,咱們稱之爲值傳遞,值傳遞是不能修改實參的值的
實參向形參傳遞地址,咱們稱之爲地址傳遞,地址傳遞能夠修改實參的值
例子8:編寫一個函數,函數傳入一個無序的整形數組,函數無返回值,函數的功能是講傳入的數組實現從小到大排序
func sort(inout a: [Int]){
a.sortInPlace()
}
var arr = [1,5,3,23,65,23,12]
sort(&arr)
print(arr)
外部參數與函數類型
func getPan(width: Int,height: Int) ->Int {
return (width + height) * 2
}
print(getPan(10, height: 20))//此處的height就是隱式的外部參數,由於此處的外部參數和內部參數是同一個
內部參數就是離冒號近的參數名稱,用於參與函數內部運算
外部參數就是離冒號遠的參數名稱,用於函數調用時加強代碼的可讀性,如:
func getArea(寬 width: Int,高 height: Int)->Int {
return width * height
}
此處的寬、高就是外部參數
外部參數名稱缺省
func personInfo(name: String, _ age: Int) ->String//用_ 表明外部參數缺省
{
return name + "\(age)"
}
print(personInfo("小明", 19))
參數帶有默認值
func shape(width: Int = 100) {
print(width * width)
}
函數的參數默認是隱式常量,在函數體內不能賦值,可是能夠在定義參數的同時直接初始化
函數的重載
程序中定義多個同名函數,函數的返回值類型或者函數的參數列表不一樣,這種形式稱爲函數重載
原函數:
func getStudentInfo(name: String) {
print(name)
}
函數重載1:函數名相同,參數列表不一樣
func getStudentInfo(name: String,age: Int) {
print(name + "\(age)")
}
函數重載2:函數名相同,參數列表相同,函數返回值不一樣
func getStudentInfo(name: String) ->String {
return name
}