Swift中函數(shù)的初級(jí)操作

介紹

Swift 函數(shù)與 javascriptC# 的函數(shù)寫法很像,但和 Objective-C 的方法卻大大不一樣。Swift 的函數(shù)經(jīng)過歷代版本的優(yōu)化也已逐漸成型,寫法大同小異,話不多說,直接上代碼

函數(shù)的定義

  1. 常規(guī)函數(shù)定義(有參數(shù)也有返回值)
override func viewDidLoad() {
   super.viewDidLoad()
   print(sum(a : 10, b : 5))
}
// 格式 函數(shù)名(形參1,形參2...) -> 返回值類型
func sum(a : Int, b : Int) -> Int {
   return a + b
}

以上代碼為 Swift 4.0 的語法。 Swift 4.0 的語法沒有改動(dòng),依然延續(xù)了 Swift 3.0 的規(guī)則。在 Swift 2.0 中略有區(qū)別,調(diào)用語法格式為:sum(10, b : 5),少了第一個(gè)參數(shù)的形參看起來有些不倫不類。

  1. 使用外部參數(shù)定義函數(shù)
override func viewDidLoad() {
   super.viewDidLoad()
   print(sum(number1 : 10, number2 : 5))
}
func sum(number1 a : Int, number2 b : Int) -> Int {
   return a + b
}

所謂的外部參數(shù)就是在形參前加一個(gè)替代形參的別名,這個(gè)外部參數(shù)不會(huì)影響函數(shù)內(nèi)部的細(xì)節(jié)。通過添加外部參數(shù)來定義函數(shù)可以使調(diào)用者更加直觀的理解傳參的類型,不需要再去源文件里查看,減少開發(fā)時(shí)間成本。

  1. 定義函數(shù)并忽略形參名稱
override func viewDidLoad() {
   super.viewDidLoad()
   print(sum(10, 5))
}
func sum(_ a : Int, _ b : Int) -> Int {
   return a + b
}

外部參數(shù)使用 “_” 表示在外部調(diào)用該函數(shù)時(shí)忽略形參名稱。
結(jié)果輸出:


函數(shù)的定義結(jié)果輸出
  1. 定義無返回值函數(shù)的三種方式
override func viewDidLoad() {
   super.viewDidLoad()
   demo1()
   demo2()
   demo3()
}
func demo1() {
   print("直接省略返回值")
}
func demo2() -> () {
   print("使用()表示空?qǐng)?zhí)行")
}  
func demo3() -> Void {
   print("使用 Void 關(guān)鍵字表示無返回值")
}

輸出結(jié)果:


無返回值函數(shù)輸出結(jié)果
  1. 定義函數(shù)的默認(rèn)值
override func viewDidLoad() {
   super.viewDidLoad()
   print(sum())
   print(sum(a : 100))
   print(sum(b : 50))
   print(sum(a: 20, b : 5))
}
func sum(a : Int = 5, b : Int = 10) {
   return a + b
}

默認(rèn)值結(jié)果輸出:


有默認(rèn)值函數(shù)的輸出
  1. 類方法(函數(shù))的定義
    Objective-C 的程序員對(duì)于 實(shí)例方法類方法 并不陌生,在 Objective-C 中定義實(shí)例方法使用 -,定義類方法使用 +,在 Swift 中類方法的定義更明確一些,必須使用 class 或者 static 修飾。用法為:在 class 類中定義類方法可以使用 classstatic 修飾,在 structenum中只能使用 static。
class Calculators {
    /// 使用 static 修飾類方法
    static func calculator(number1 a: Int, number2 b: Int) -> Int {
        return a + b
    }
    /// 使用 class 修飾類方法
    class func calculator1(number1 a: Int, number2 b: Int) -> Int {
        return a + b
    }
}
class ViewController : UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        print(Calculators.calculator(number1: 10, number2: 5))
        print(Calculators.calculator1(number1: 10, number2: 5))
    }
}

類方法輸出結(jié)果

代碼正常輸出,說明在類(class)中定義類方法使用 class 或者 static 并沒有什么區(qū)別,但在定義結(jié)構(gòu)體的時(shí)候會(huì)有明確的指示:
在 struct 中使用class修飾的報(bào)錯(cuò)提示

struct 使用 class 修飾符會(huì)報(bào)編譯錯(cuò)誤 Class methods are only allowed within classes; use 'static' to declare a static method。在開發(fā)中要有區(qū)分的使用。

總結(jié)

  • Swift 的函數(shù)比 Objective-C 的方法更加靈活,代碼量可以大大縮減;
  • Swift 函數(shù)定義的方式都有一定的規(guī)范 func 函數(shù)名(參數(shù)1, 參數(shù)2,....) 返回類型
最后編輯于
?著作權(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)容

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