• <small id="w8oog"></small>
  • <td id="w8oog"></td>
  • <small id="w8oog"></small><xmp id="w8oog"><td id="w8oog"></td><td id="w8oog"><li id="w8oog"></li></td><xmp id="w8oog"><td id="w8oog"></td>
  • <td id="w8oog"></td><td id="w8oog"><li id="w8oog"></li></td><small id="w8oog"></small>
  • <td id="w8oog"></td>
  • <small id="w8oog"></small>
  • <small id="w8oog"></small><td id="w8oog"></td>
    免費開源的iOS開發學習平臺

    Swift: 7.1 函數基礎

    函數一段用來處理特定任務的自包含代碼。通過給這段代碼加上命名標識,就可以通過調用這個函數名字來執行這段代碼。Swift的函數語法非常靈活,既可以用來表示不帶參數名的簡單的C樣式的函數,還可以表示帶局部和外部參數名的復雜的Objective-C樣式的函數。

    函數定義和調用

    Swift中的函數的聲明組成跟其他語言一樣,即包含關鍵字、函數名、參數列表、返回值和函數體。區別在于寫法上有所差別。

    func sayHello(name:String) -> String {
        return "Hello, " + name + "!"
    }
    

    上面兩行代碼定義了一個sayHello函數,以func關鍵字開頭,參數列表以名稱、類型對的方式組成,右箭頭指定了函數的返回值的類型。函數定義完成后可以通過如下形式調用。

    //把返回值賦給一個常量
    let str = sayHello(name: "Amy")
    print(str)
    //直接在print函數里面調用
    print(sayHello(name: "Bry"))
    

    函數形參和返回值

    • 與Objective-C類似,函數可以沒有形參沒有返回值,也可以有多個形參,不過,Swift函數還可以有多個返回值,多個返回值是元組的樣式(x,y)。下面代碼演示不同類型形參和返回值的函數。
    //多個參數
    func maxInt(a: Int, b: Int)-> Int{
        return a > b ? a :b
    }
    print(maxInt(a:2,b:1)) //輸出2
    //無形參、無返回值
    func printConst(){
        print("I'm constant~")
    }
    printConst()
    
    //多個返回值
    func getPoint()-> (Int, Int){
        return (1,1)
    }
    let (x,y) = getPoint()
    print("(\(x),\(y))")
    
    • Swift繼承了Objective-C為參數命名外部形參名的做法,在內部形參名前面可以加一個外部調用的標識。默認的,如果不指定外部形參名,就用內部形參名進行代替。
    //不指定外部形參名
        func someFunction(first: Int, second: Int) {
        }
    someFunction(first: 1, second: 2)
    
    //指定外部形參名 argumentLabel
    func someFunction1(argumentLabel parameterName: Int) {
       
    }
    someFunction1(argumentLabel: 1)
    
    
    • 可以使用下劃線(_)作為占位符,來忽略外部形參名,這樣在調用的時候,就可以不用在參數前面加上外部形參名。注意,如果有外部形參名,在函數調用時候必須要帶上。
    func someFunction(_ first: Int, second: Int) {
      
    }
    someFunction(1, second: 2)
    
    • 與Objective-C語言類似,Swift函數還可以給函數參數設置默認值,如果設置了默認值,在函數調用的時候,可以忽略這個參數。
    func someFunction(first: Int, withDefault: Int = 12) {
    }
    someFunction(first: 3, withDefault: 6) // withDefault的值是12
    someFunction(first: 4) // withDefault 的值是 12
    
    • 同樣的,函數還可以有可變形參,也就是參數可以為0到多個相同類型的值。只要在參數名后面插入(...)即可創建可變形參。函數中最多只能有一個形參。
    func sumNum(_ numbers: Double...) -> Double {
        var total: Double = 0
        for number in numbers {
            total += number
        }
        return total
    }
    sumNum(1, 2, 3, 4, 5)
    // 返回值15是上面幾個數之和
    sumNum(3, 8.25, 18.75)
    // 返回上面幾個數的和30
    
    • 默認情況下函數的參數都是常量,如果在函數的內部嘗試著去改變形參的值的話,編譯器會報錯。如果想要改變形參的值的話,就在參數的前面加上inout關鍵字,函數調用的時候,實參的前面加上(&)符合即可,表示的是傳遞過去一個指針。
    func swapInt(_ a: inout Int, _ b: inout Int) {
        let temporaryA = a
        a = b
        b = temporaryA
    }
    var one = 1
    var two = 2
    swapInt(&one,&two)
    print("現在兩個值是\(one),\(two)")
    //打?。含F在兩個值是2,1
    

    演示示例

    下面示例代碼演示了函數的定義和使用,函數形參和返回值的各種用法。

    func concat(_ prefix: inout String, nums:Int...)->(str:String,count:Int){
        for num in nums {
            prefix += String(num) + " "
        }
        return (prefix,nums.count)
    }
    
    var str = "Hello "
    var num1 = 9
    var num2 = 8
    var num3 = 7
    // 字符串的操作是值拷貝
    var returnStr = concat(&str, nums: num1,num2,num3)
    
    print(str) //函數外的值被函數改變
    
    print(returnStr) //返回的元組
    
    returnStr.str += "6" //驗證字符串是值拷貝
    
    print(str)
    
    print(returnStr)
    
    

    運行結果如下截圖。

    示例代碼

    https://github.com/99ios/23.7


    ijzzijzzij亚洲大全|天天狠天天透天干天天|日本一本加勒比五月天伊人久久|久久久噜噜噜久久中文字幕色伊伊
  • <small id="w8oog"></small>
  • <td id="w8oog"></td>
  • <small id="w8oog"></small><xmp id="w8oog"><td id="w8oog"></td><td id="w8oog"><li id="w8oog"></li></td><xmp id="w8oog"><td id="w8oog"></td>
  • <td id="w8oog"></td><td id="w8oog"><li id="w8oog"></li></td><small id="w8oog"></small>
  • <td id="w8oog"></td>
  • <small id="w8oog"></small>
  • <small id="w8oog"></small><td id="w8oog"></td>