介紹
Swift
函數(shù)與 javascript
和 C#
的函數(shù)寫法很像,但和 Objective-C
的方法卻大大不一樣像樊。Swift
的函數(shù)經(jīng)過歷代版本的優(yōu)化也已逐漸成型泽西,寫法大同小異佛纫,話不多說缝彬,直接上代碼
函數(shù)的定義
- 常規(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
的語法沒有改動谷浅,依然延續(xù)了 Swift 3.0
的規(guī)則扒俯。在 Swift 2.0
中略有區(qū)別,調(diào)用語法格式為:sum(10, b : 5)
一疯,少了第一個參數(shù)的形參看起來有些不倫不類撼玄。
- 使用外部參數(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ù)就是在形參前加一個替代形參的別名,這個外部參數(shù)不會影響函數(shù)內(nèi)部的細(xì)節(jié)墩邀。通過添加外部參數(shù)來定義函數(shù)可以使調(diào)用者更加直觀的理解傳參的類型掌猛,不需要再去源文件里查看,減少開發(fā)時間成本磕蒲。
- 定義函數(shù)并忽略形參名稱
override func viewDidLoad() {
super.viewDidLoad()
print(sum(10, 5))
}
func sum(_ a : Int, _ b : Int) -> Int {
return a + b
}
外部參數(shù)使用 “_” 表示在外部調(diào)用該函數(shù)時忽略形參名稱留潦。
結(jié)果輸出:
- 定義無返回值函數(shù)的三種方式
override func viewDidLoad() {
super.viewDidLoad()
demo1()
demo2()
demo3()
}
func demo1() {
print("直接省略返回值")
}
func demo2() -> () {
print("使用()表示空執(zhí)行")
}
func demo3() -> Void {
print("使用 Void 關(guān)鍵字表示無返回值")
}
輸出結(jié)果:
- 定義函數(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é)果輸出:
- 類方法(函數(shù))的定義
Objective-C
的程序員對于實例方法
和類方法
并不陌生,在Objective-C
中定義實例方法使用-
辣往,定義類方法使用+
,在Swift
中類方法的定義更明確一些殖卑,必須使用class
或者static
修飾站削。用法為:在class
類中定義類方法可以使用class
或static
修飾,在struct
或enum
中只能使用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))
}
}
代碼正常輸出许起,說明在類(
class
)中定義類方法使用 class
或者 static
并沒有什么區(qū)別十偶,但在定義結(jié)構(gòu)體的時候會有明確的指示:在
struct
使用 class
修飾符會報編譯錯誤 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,....) 返回類型
猛频。