SwiftUI基礎(chǔ)之函數(shù)

  • 創(chuàng)建函數(shù)

// 創(chuàng)建函數(shù),無參,無返回值,同 func func1() -> Void
func func1() {
    print("no params func")
}
func1()
// 創(chuàng)建函數(shù),帶參,帶返回類型
func func2(param: Int) -> Bool {
    return param > 60
}

func2(param: 80)

// 創(chuàng)建函數(shù),帶多個參數(shù),返回類型為元組
func func3(param1: String, param2: Int) -> (result1: String, result2: Int) {
    return (param1 + "11", param2 + 20)
}

let tuple = func3(param1: "param", param2: 60)
if tuple.result1.starts(with: "param") {
    print(tuple.result2)
}

// 創(chuàng)建函數(shù),帶參,返回類型為 Optional
func func4(param: Int) -> Int? {
    guard param > 2 else {
        return nil
    }
    return param + 2
}

if let result = func4(param: 3) {
    print(result)
}

  • 函數(shù)內(nèi)外參數(shù)命名

// 函數(shù)參數(shù)指定外部名稱
func outerNameFunc(name1 param1: Int, name2 param2: Int, param3: Int) {
    print(param1, param2, param3)
}
// 函數(shù)參數(shù)使用外部名稱
outerNameFunc(name1: 1, name2: 2, param3: 3)

func normalFunc(param1: Int, param2: Int, param3: Int) {
    print(param1, param2, param3)
}
// 默認函數(shù)參數(shù)的內(nèi)部名稱和外部名稱一致,調(diào)用函數(shù)時需要指定參數(shù)名稱
normalFunc(param1: 1, param2: 2, param3: 3)

// 調(diào)用函數(shù)時省略參數(shù)名稱
func annoFunc(_ param1: Int, _ param2: Int, _ param3: Int) {
    print(param1, param2, param3)
}
annoFunc(1, 2, 3)

  • 函數(shù)參數(shù)指定默認值

func func5(param1: Int, param2: Int = 2, param3: Int = 3) {
    print(param1, param2, param3)
}
// 調(diào)用時,可以只傳入沒有默認值的參數(shù)
func5(param1: 1)
// 調(diào)用時,參數(shù)位置要嚴(yán)格對應(yīng)
func5(param1: 1, param2: 22)


// 函數(shù)參數(shù)指定默認值
func func6(param1: Int, param2: Int = 2, param3: Int) {
    print(param1, param2, param3)
}
// 調(diào)用時,參數(shù)位置要嚴(yán)格對應(yīng)
func6(param1: 1, param3: 33)

  • 可變參數(shù)

// 函數(shù)傳入多個可變數(shù)量的參數(shù),類似于 Kotlin 的 vararg
func mutableParamFunc(param: Int...) {
    var sum = 0
    for ele in param {
        sum += ele
    }
    print(sum)
}
mutableParamFunc(param: 1, 2)
mutableParamFunc(param: 1, 2, 3, 4)

// swift 的函數(shù)參數(shù)值(除引用類型外)默認是不可修改的
func immutableParam(param: Int) {
//    param += 1 // 編譯失敗 error: left side of mutating operator isn't mutable: 'param' is a 'let' constant
}

// 為了可以在函數(shù)參數(shù)內(nèi)部修改參數(shù)值,可以使用 inout 修飾參數(shù)
func immutableParam(param:inout Int) {
    param += 1 // 編譯通過
    print(param) // 2
}
// 調(diào)用時需要使用 & 符號
var number = 1
immutableParam(param: &number)
print(number) // 2, number的值也被修改了

  • 函數(shù)類型引用,函數(shù)嵌套

// 函數(shù)可以作為類型進行聲明,就像使用其他類型一樣
let func7Name: (Int, Int) -> Bool
// 將閉包賦值給函數(shù)變量
func7Name = {(param1: Int, param2: Int) in
    return param1 > param2
}
// 調(diào)用函數(shù)變量
func7Name(1, 2) // false

// 函數(shù)作為參數(shù)傳入
func func8(funParam: (Int, Int) -> Bool) {
    print(funParam(2, 1)) // true
}
// 將 func7 傳入 func8
func8(funParam: func7Name)

// 函數(shù)作為返回值類型
func func9() -> (Int, Int) -> Bool {
    return func7Name // 將 func7Name 返回
}

// 函數(shù)嵌套
func outerFunc() {
    let outerScope = "outer scope"
    func innerFunc() {
        print(outerScope, "in inner func")
    }
    // 在外部函數(shù)內(nèi)調(diào)用內(nèi)部嵌套函數(shù),在外部函數(shù)以外無法調(diào)用它
    innerFunc()
}
// 調(diào)用外部函數(shù)
outerFunc()

  • defer的用法

很簡單,用一句話概括,就是 defer block 里的代碼會在函數(shù) return 之前執(zhí)行,無論函數(shù)是從哪個分支 return 的,還是有 throw,還是自然而然走到最后一行。

func testDefer() {
    defer {
        print("方法中defer內(nèi)容")
    }
    if true {
        defer {
            print("if 中defer內(nèi)容")
        }
        print("if中最后的代碼")
    }
    print("方法中的代碼")
    if true {
        return
    }
    print("方法結(jié)束前最后一句代碼")
}
testDefer()        

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 1、隱式解析可選類型 有時候在程序架構(gòu)中,第一次被賦值之后,可以確定一個可選類型總會有值,這時候每次使用時都判斷和...
    Mr_xuy閱讀 618評論 1 4
  • 1、元祖(Tuple) 把多個值合并成單一的復(fù)合型的值。特點:1、元祖中的值可以是任何類型,且不必是同一類型。2、...
    Abner_XuanYuan閱讀 1,620評論 0 0
  • Swift 介紹 簡介 Swift 語言由蘋果公司在 2014 年推出,用來撰寫 OS X 和 iOS 應(yīng)用程序 ...
    大L君閱讀 3,425評論 3 25
  • Playground是什么?從Xcode6開始出現(xiàn)(Swift開始出現(xiàn))翻譯為:操場/游樂場對于學(xué)習(xí)Swift基本...
    越天高閱讀 553評論 0 2
  • Java基礎(chǔ)常見英語詞匯(共70個)['?bd?ekt] ['?:rientid]導(dǎo)向的 ...
    今夜子辰閱讀 3,478評論 1 34

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