標籤:
知識點:
- swift函數的不同點
- 無傳回值的函數的三種寫法
- 返回元組資料
- 外部參數名
- 外部參數名的簡寫
- 預設參數值,有預設參數值的時候,系統會自動的將參數名當成外部參數名。
- 在有預設的參數值的情況下,增加一個底線_,系統會忽略掉外部參數名
- 函數的形參預設是常量,想要在函數體的內部改變形參的值,將其設定成var即可
- 輸入輸出參數及其注意點
範例程式碼:
//: Playground - noun: a place where people can playimport UIKit// sum函數名,num1和num2參數名,箭頭後面的Int是傳回型別func sum(num1: Int, num2: Int) -> Int { return num1 + num2}sum(1, 2)// 無傳回值的函數的三種寫法func noRe1() -> Void {}func noRe2() -> () {}func noRe3(){}// 返回元組資料func getPoint() -> (Int, Int) { return (10, 10)}func getPerson(id: Int) -> (name: String, age: Int){ if id > 0 { return ("jack", 20) } else { return ("nobody", 10) }}var person = getPerson(10)println("name: \(person.name), age: \(person.age)")// 外部參數名,這裡分別為name,age,no設定了外部參數名,stu_name,stu_age,stu_no// 作用,方便閱讀func addStudent(stu_name name:String, stu_age age:Int, stu_no no:Int) { println("name: \(name), age: \(age), no:\(no)")}addStudent(stu_name: "jack", stu_age: 10, stu_no: 20)// 外部參數名的簡寫,在內部形參名的前面加上#號,這樣內部形參名就也可以充當外部參數名func addStudent2(#name: String, #age: Int, #no: Int) { println("name: \(name), age: \(age), no:\(no)")}addStudent2(name: "Tom", age: 20, no: 222)// 預設參數值// 這裡給age了一個預設值,所以調用的時候,不寫也行// 有預設參數的形參,系統會給其提供一個外部參數名,和內部形參參數名相同func addStudent3(#name: String, age: Int = 20) { println("name: \(name), age: \(age)")}addStudent3(name: "Smith")addStudent3(name: "Hello", age: 10)// 在有預設參數名前增加一個底線_,系統會忽略掉外部參數名func addStudent4(name: String, _ age: Int = 20) { println("name: \(name), age: \(age)")}addStudent4("A", 2)// 函數的形參預設是常量,如果想在函數的內部修改形參的值,將形參設定成var即可func addStr(var initStr: String, suffix: String, num: Int) -> String { for _ in 0..<num { initStr += suffix } return initStr}addStr("A", "B", 10)// 輸入輸出參數,類似於C中的根據地址改變函數中變數的值/*注意:1、不能傳入常量和字面量(比如10)數,因為他們都是不可更改的2、傳遞參數時候,必須在實參的前面加上&3、輸入輸出參數不能有預設值4、輸入輸出參數不能使可變參數5、輸入輸出參數不能再使用let、var修飾(inout和let、var不能共存)*/func change(inout num: Int) { num = 10}var a = 20// 凡是輸入輸出參數,調用的時候前面都要增加&符號change(&a)println(a)// 如何在不使用第三個參數的情況下,交換兩個數func swap(inout a:Int, inout b:Int) { a = a + b b = a - b a = a - b}// 演算法2func swap1(inout a:Int, inout b:Int) {// 異或運算的特點,相同的會抵消 a = a ^ b b = a ^ b a = a ^ b}var temp1 = 10var temp2 = 20swap(&temp1, &temp2)println("temp1 = \(temp1), temp2 = \(temp2)")var temp3 = 30var temp4 = 40swap1(&temp3, &temp4)println("temp1 = \(temp3), temp2 = \(temp4)")// 輸入輸出函數的使用價值// 舉例:不用傳回值也可以計算出和與差// 有傳回值寫法func sumAndMinus(num1: Int, num2: Int) -> (sum: Int, minus: Int) { return (num1 + num2, num1 - num2)}var result = sumAndMinus(10, 20)result.sumresult.minus// 輸入輸出函數寫法func sumAndMinus2(num1: Int, num2: Int, inout sum:Int, inout minus:Int) { sum = num1 + num2 minus = num1 - num2}var sum1 = 0var minus1 = 0sumAndMinus2(20, 10, &sum1, &minus1)sum1minus1
Swift學習—函數