Swift 函數的理解

Swift.png
函數的簡單說明
  • 函數是一段完成特定任務的獨立代碼片段。
  • 在定義一個函數時迅腔,有多個或者一個數據類型的值,作為函數的輸入靠娱,成為參數
  • 在一定某個類型的值作為返回值的時候沧烈,成為返回類型
  • func作為前綴,指定函數的返回類型時像云,用返回箭頭-> 后跟返回類型的名稱的方式表示
//表示如下:
func 函數名(參數1:參數類型锌雀,參數2:參數類型蚂夕,參數3:參數類型...) -> 返回值類型 {
    代碼塊
    return 返回值
}

注意: 函數的參數默認是 let類型,不可以修改的腋逆,如果想要修改双抽,必須使用inout關鍵字 就是后面說的 引用類型指針傳遞

函數參數與返回值
  • 無參數無返回值的函數
func hanshu() -> Void {
    
    print("沒有參數,沒有返回值");
}

hanshu();
//打印結果: 沒有參數闲礼,沒有返回值

//簡寫的 沒有返回值的話  直接簡寫

func hanshu(){
    
    print("沒有參數,沒有返回值");
}

hanshu();

//注意:嚴格上來說铐维,雖然沒有返回值被定義柬泽,hanshu() 函數依然返回了值。沒有定義返回類型的函數會返回一 個特殊的 Void 值嫁蛇。它其實是一個空的元組(tuple)锨并,沒有任何元素,可以寫成()睬棚。


  • 無參數有返回值的函數
func sayHello() ->String {
    
    return "hello 你好";
}

let hello = sayHello();
print(hello);
//打印結果: hello 你好

  • 有參數 沒有返回值
//name:參數名 String:參數類型
func personName(name:String) {
    
    print("我是\(name),哈哈");
}

personName(name: "CC");

//打印結果:我是CC,哈哈
  • 有參數 有返回值第煮,多個參數用 , 分開
func sum(num1:Int,num2:Int,num3:Int) -> Int {
    
    return  num1+num2 + num3;
}

let numSum = sum(num1: 10, num2: 20, num3: 30);
print(numSum);

//打印結果:60

  • 返回一組數據的函數 多重返回值函數
//元祖 是保存一組數據的抑党,這個函數 返回值是一個  元祖
func tulpNum(PersonName:String,PersonAge:Int,PersonSex:String) -> (name:String,age:Int,sex:String){
    
    
    return (PersonName,PersonAge,PersonSex);
}


let tulp =  tulpNum(PersonName: "CC", PersonAge: 20, PersonSex: "男");
tulp.name;
//打印是 “CC

//參數是數組 返回是元祖
 func minMax(array: [Int]) -> (min: Int, max: Int) {
     var currentMin = array[0]
     var currentMax = array[0]
     for value in array[1..<array.count] {
         if value < currentMin {
             currentMin = value
         } else if value > currentMax {
             currentMax = value
} }
     return (currentMin, currentMax)
 }


let arrayTulp = minMax(array: [1,2,3,10,5,9]);

print(arrayTulp.min);
print(arrayTulp.max);
//打印結果是 : min是:1
              max是:10 

函數參數標簽參數名稱
  • 指定參數標簽
    • 可以在函數名稱前指定它的參數標簽包警,中間以空格分隔
func someFunction(argumentLabel  parameterName: Int) { 
// 在函數體內,   parameterName 代表參數值
}

//  from 參數標簽
func greet(person: String, from hometown: String) -> String {
    return "Hello \(person)!  Glad you could visit from \(hometown)."
}
print(greet(person: "Bill", from: "Cupertino"))
// 打印 "Hello Bill! Glad you could visit from Cupertino."




  • 忽略參數標簽
    • 不希望為某個參數添加一個標簽底靠,可以使用一個下劃線( _ )來代替一個明確的參數標簽害晦。
func someFunction(_ firstParameterName: Int, secondParameterName: Int) {
// 在函數體內,firstParameterName 和 secondParameterName 代表參數中的第一個和第二個參數值
}
someFunction(1, secondParameterName: 2)
  • 默認參數
    • 某些情況,如果沒有傳入具體的參數,可以使用默認參數
func makecoffee(type :String = "卡布奇諾") -> String {
    return "制作一杯\(type)咖啡暑中。"
}

let coffee1 = makecoffee("拿鐵")
// "制作一杯拿鐵咖啡壹瘟。"
let coffee2 = makecoffee()
// 打印:"制作一杯卡布奇諾咖啡鳄逾。
  • 可變參數
    • swift中函數的參數個數可以變化稻轨,它可以接受不確定數量的輸入類型參數
    • 它們必須具有相同的類型
    • 我們可以通過在參數類型名后面加入(...)的方式來指示這是可變參數

注意:一個函數,最多只能有一個可變參數雕凹,緊跟在可變參數后面的參數不能省略參數標簽

func sum(numbers:Double...) -> Double {
    var total: Double = 0
    for number in numbers {
        total += number
    }
    return total
}

sum(100.0, 20, 30)
sum(30, 80)
//注意: 一個函數最多只能擁有一個可變參數殴俱。
  • 引用類型(指針的傳遞)
    • 默認情況下,函數的參數是值傳遞.如果想改變外面的變量,則需要傳遞變量的地址
    • 必須是變量,因為需要在內部改變其值
    • Swift提供的inout關鍵字就可以實現
 // 函數一:值傳遞
  func swap(var a : Int, var b : Int) {
    let temp = a;
    a = b;
    b = temp
   print("a:\(a), b:\(b)")
  }
   var a = 10
  var b = 20
  swap(a, b: b)
  print("a:\(a), b:\(b)")


  // 函數二:指針的傳遞
  func swap1(a:inout  Int, inout b : Int) {
  let temp = a
    a = b
    b = temp
    print("a:\(a), b:\(b)")
}

  swap1(&a, b: &b)
  print("a:\(a), b:\(b)")


函數的類型
// 函數類型 (Int, Int, Int) -> Int

//函數類型: 參數類型 和返回值類型 組成
func sum(num1:Int,num2:Int,num3:Int) -> Int {

    return  num1+num2 + num3;
}


//函數類型作為參數
func exen(n1:Int,n2:Int,n3:Int,fun:(Int,Int,Int) -> Int) -> Void{
    
    let result = fun(n1,n2,n3);
    print(result);
    
}

exen(n1: 10, n2: 10, n3:30,fun: sum);


//函數類型作為返回值


func getFunc() -> (Int,Int,Int) -> Int{
    return sum;
}
let value1 = getFunc();
value1(20,30,20);

//打印: 70

//函數類型 作為 類的屬性




//編輯器根據
 1.函數的名稱分別函數
 2.根據外部參數名稱 分別函數
3.根據 參數類型 + 返回值類型 = 函數類型 來區(qū)別


函數重載

  • 函數名相同
  • 參數個數不同 || 參數不同 || 參數標簽不同
//函數名相同  參數標簽不同
func f1(v1:Int,v2:Int){
    print(v1 + v2);
}

func f1(v3:Int,v4:Int){
    print(v3 + v4);
}

內聯(lián)函數

  • 內聯(lián)函數: 在函數調用的時候请琳, 把其展開成函數體粱挡,直接執(zhí)行
  • 以下函數是不會內聯(lián)的
    • 函數體過長
    • 包含遞歸函數
    • 包含動態(tài)派發(fā)

在Swift中的項目中,如果在打包函數或者調試中使用Release模式,

image.png
image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末俄精,一起剝皮案震驚了整個濱河市询筏,隨后出現的幾起案子,更是在濱河造成了極大的恐慌竖慧,老刑警劉巖嫌套,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逆屡,死亡現場離奇詭異,居然都是意外死亡踱讨,警方通過查閱死者的電腦和手機魏蔗,發(fā)現死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痹筛,“玉大人莺治,你說我怎么就攤上這事≈愠恚” “怎么了谣旁?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長滋早。 經常有香客問我榄审,道長,這世上最難降的妖魔是什么杆麸? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任搁进,我火速辦了婚禮,結果婚禮上昔头,老公的妹妹穿的比我還像新娘饼问。我一直安慰自己,他們只是感情好减细,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布匆瓜。 她就那樣靜靜地躺著,像睡著了一般未蝌。 火紅的嫁衣襯著肌膚如雪驮吱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天萧吠,我揣著相機與錄音左冬,去河邊找鬼。 笑死纸型,一個胖子當著我的面吹牛拇砰,可吹牛的內容都是我干的。 我是一名探鬼主播狰腌,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼除破,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了琼腔?” 一聲冷哼從身側響起瑰枫,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后光坝,有當地人在樹林里發(fā)現了一具尸體尸诽,經...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年盯另,在試婚紗的時候發(fā)現自己被綠了性含。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸳惯,死狀恐怖商蕴,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情芝发,我是刑警寧澤究恤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站后德,受9級特大地震影響,放射性物質發(fā)生泄漏抄腔。R本人自食惡果不足惜瓢湃,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赫蛇。 院中可真熱鬧绵患,春花似錦、人聲如沸悟耘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽暂幼。三九已至筏勒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旺嬉,已是汗流浹背管行。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留邪媳,地道東北人捐顷。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像雨效,于是被迫代替她去往敵國和親迅涮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容

  • 函數是用來完成特定任務的獨立的代碼塊徽龟。給一個函數起一個合適的名字叮姑,用來標識函數做什么,并且當函數需要執(zhí)行的時候顿肺,這...
    窮人家的孩紙閱讀 806評論 2 1
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理戏溺,服務發(fā)現渣蜗,斷路器,智...
    卡卡羅2017閱讀 134,628評論 18 139
  • 定義和調用函數 在下面的例子中的函數叫做greet(person :)旷祸,因為這是它的作用 - 它需要一個人的名字作...
    Joker_King閱讀 273評論 0 1
  • 函數是用來完成特定任務的獨立的代碼塊耕拷。可以給函數起一個名字托享,用于標識一個函數骚烧,當函數需要執(zhí)行的時候,這個名字就會用...
    EndEvent閱讀 742評論 1 3
  • 圖文|王學藝 五闰围、四赃绊、三……綠燈提示行將開始! 我驀然從沉思中下意識拿出手機羡榴,打開打開拍照碧查,定格這生活瞬間被觸動的...
    王學藝閱讀 923評論 14 17