swift 函數(shù)(函數(shù)定義、函數(shù)調(diào)用、函數(shù)類型、嵌套函數(shù))

函數(shù)定義與調(diào)用

  • 無參數(shù),無返回值(沒有定義返回類型的函數(shù)會(huì)返回Void,它其實(shí)是一個(gè)空的元組,可以寫成())
func sayHI(){
    print("sayHI")
}
sayHI()
  • 有參數(shù),無返回值
func sayHI(name:String)  {
    print("hello " + name)
}
sayHI(name: "lily")
  • 無參數(shù),有返回值
func sayHI() -> String {
    return "sayHI"
}
let str = sayHI()
  • 有參數(shù),有返回值
func sayHI(name:String,age:Int) -> String {
    return "我是\(name),今年\(age)歲"
}
let str = sayHI(name: "lily", age: 12)

函數(shù)參數(shù)標(biāo)簽和參數(shù)名稱

  • 指定參數(shù)標(biāo)簽(參數(shù)名稱前面編寫參數(shù)標(biāo)簽,用空格分隔)
func sayHI(nameLabel name:String,ageLabel age:Int) -> String {
    return "我是\(name),今年\(age)歲"
}
  • 省略參數(shù)標(biāo)簽(不想要參數(shù)的參數(shù)標(biāo)簽,請(qǐng)為該參數(shù)編寫下劃線(_))
func sayHello(_ name:String,ageLabel age:Int) {
    print("我是\(name),今年\(age)歲")
}
sayHello("lily", ageLabel: 12)
  • 默認(rèn)參數(shù)值(函數(shù)體中可以為參數(shù)定義默認(rèn)值,當(dāng)默認(rèn)值被定義之后,調(diào)用函數(shù)時(shí)可以忽略這個(gè)參數(shù))
    將沒有默認(rèn)值的參數(shù)放在函數(shù)參數(shù)列表的最前
func sayHello(nameLabel name:String,ageLabel age:Int = 12) {
    print("我是\(name),今年\(age)歲")
}
sayHello(nameLabel: "lily")
  • 可變參數(shù)
    • 一個(gè)可變參數(shù)可以接受零個(gè)或多個(gè)值
    • 函數(shù)調(diào)用時(shí),函數(shù)參數(shù)可以傳入多個(gè)
    • 在變量類型名后面加入(...)的方式來定義可變參數(shù)
    • 可變參數(shù)的傳入值在函數(shù)體中以數(shù)組形式讀取
    • 一個(gè)函數(shù)最多只能擁有一個(gè)可變參數(shù)
func message(_ str:String ...) {
    print(str[0] + " " + str[1])
}
message("hello","world")
  • 指針類型(輸入輸出參數(shù))
    • 輸入輸出參數(shù)可以改變函數(shù)體外的值
    • 定義輸入輸出參數(shù)時(shí),在參數(shù)定義前加 inout關(guān)鍵字
    • 輸入輸出參數(shù)不能有默認(rèn)值,而且可變參數(shù)不能用 inout 標(biāo)記
    • 只能傳遞變量給輸入輸出參數(shù),當(dāng)傳入的參數(shù)作為輸入輸出參數(shù)時(shí),需要在參數(shù)名前加 & 符,表示這個(gè)值可以被函數(shù)修改
func exchangeValue(valueA value1:inout Int,valueB value2:inout Int) {
        let temp = value1
        value1 = value2
        value2 = temp   
}

var a = 3
var b = 5
exchangeValue(valueA: &a, valueB: &b)
print("\(a),\(b)")   //5,3

函數(shù)類型

  • 函數(shù)的類型由函數(shù)的參數(shù)類型返回類型組成
func add(_ a:Int, _ b:Int) -> Int {
    return a + b
}

這個(gè)函數(shù)的類型是(Int, Int) -> Int,可以理解為“這個(gè)函數(shù)類型有倆個(gè)Int型的參數(shù)并返回一個(gè)Int型的值”

func sayHI(){
    print("sayHI")
}

這個(gè)函數(shù)的類型是() -> void,可以理解為“這個(gè)函數(shù)類型沒有參數(shù),返回Void類型的函數(shù)”

  • 函數(shù)類型的使用
    定義一個(gè)類型為函數(shù)的常量或變量,并將適當(dāng)?shù)暮瘮?shù)賦值給它
func add(_ a:Int, _ b:Int) -> Int {
    return a + b
}
//定義一個(gè)叫做 function 的變量,類型是‘一個(gè)有兩個(gè) Int 型的參數(shù)并返回一個(gè) Int 型的值的函數(shù)’,并讓這個(gè)新變量指向 add 函數(shù)
var function :(Int,Int)-> Int = add
print(function(2,3))
  • 函數(shù)類型作為參數(shù)
    定義了 showResult(_:_:_:) 函數(shù),它有三個(gè)參數(shù):第一個(gè)參數(shù)叫fun,類型是 (Int, Int) -> Int,你可以傳入任何這種類型的函數(shù);第二個(gè)和第三個(gè)參數(shù)叫 ab,它們的類型都是 Int,這兩個(gè)值作為已給出的函數(shù)的輸入值
func showResult(_ fun:(Int,Int)->Int,_ a:Int,_ b:Int) {
    print(fun(a,b))
}

func add(_ a:Int, _ b:Int) -> Int {
    return a + b
}

showResult(add(_:_:), 3, 2)

showResult(_:_:_:) 函數(shù)的作用就是輸出另一個(gè)適當(dāng)類型的數(shù)學(xué)函數(shù)的調(diào)用結(jié)果。它不關(guān)心傳入函數(shù)是如何實(shí)現(xiàn)的,只關(guān)心傳入的函數(shù)是不是一個(gè)正確的類型。這使得 showResult(_:_:_:) 能以一種類型安全(type-safe)的方式將一部分功能轉(zhuǎn)給調(diào)用者實(shí)現(xiàn)。

  • 函數(shù)類型作為返回值
    定義了兩個(gè)簡(jiǎn)單函數(shù),分別是 sayHI(_:)sayHello(_:),這兩個(gè)函數(shù)的類型都是 (String) -> String。之后在定義一個(gè)showResult(:) 的函數(shù),它的返回類型是(String) -> String 類型的函數(shù)。showResult(backward:) 根據(jù)布爾值來返回(String) -> String類型函數(shù)
func sayHI(_ name:String) -> String {
    return "HI \(name)"
}
func sayHello(_ name:String) -> String {
    return "Hello \(name)"
}
func showResult(_ backward: Bool) -> (String) -> String {
    return backward ? sayHI : sayHello
}

 let show = showResult(true)
 print(show("world"))    //HI world

嵌套函數(shù)

把函數(shù)定義在別的函數(shù)體中,稱作嵌套函數(shù)

func showResult(_ backward: Bool) -> (String) -> String {
    func sayHI(_ name:String) -> String {
        return "HI \(name)"
    }
    func sayHello(_ name:String) -> String {
        return "Hello \(name)"
    }
    return backward ? sayHI : sayHello
}
 let show = showResult(true)
 print(show("world"))    //HI world
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡(jiǎn)書還為我保存起的...
    Jenaral閱讀 3,179評(píng)論 2 9
  • 函數(shù)是用來完成特定任務(wù)的獨(dú)立的代碼塊。給一個(gè)函數(shù)起一個(gè)合適的名字,用來標(biāo)識(shí)函數(shù)做什么,并且當(dāng)函數(shù)需要執(zhí)行的時(shí)候,這...
    窮人家的孩紙閱讀 867評(píng)論 2 1
  • 函數(shù)是一段完成特定任務(wù)的獨(dú)立代碼片段。你可以通過給函數(shù)命名來標(biāo)識(shí)某個(gè)函數(shù)的功能,這個(gè)名字可以被用來在需要的時(shí)候"調(diào)...
    CDLOG閱讀 251評(píng)論 0 0
  • 函數(shù)是用來完成特定任務(wù)的獨(dú)立的代碼塊。可以給函數(shù)起一個(gè)名字,用于標(biāo)識(shí)一個(gè)函數(shù),當(dāng)函數(shù)需要執(zhí)行的時(shí)候,這個(gè)名字就會(huì)用...
    EndEvent閱讀 796評(píng)論 1 3
  • 四級(jí)單詞怎么背?背了又忘怎么辦?背單詞效率低下怎么辦?相信這是許多備考考生的疑問。蔓殊在此分享一些方法,僅供參考,...
    蔓殊閱讀 689評(píng)論 4 16

友情鏈接更多精彩內(nèi)容