前言
蘋果官方推出 Swift 語言至今,已經過了 7 年之久,Swift 也更新到了 5.5 版本, 它的語法和 API 也趨向于穩定,最近閑來無事,決定開始研究這 iOS 開發編程語言的語法,因為之前有多門編程語言的使用經驗,所以本文主要記錄一些個人認為比較新奇的 Swift 語法,
中文版 Swift 檔案:https://swift.bootcss.com/
Swift 語言開源鏈接:https://github.com/apple/swift
MJ 的 Swift 教學視頻:https://www.bilibili.com/video/BV1uZ4y1T7G5
文章目錄
- 前言
- Swift PlayGround
- Swift 語法
- 可選型別與nil
- 忽略引數標簽
- 可變引數
- inout 關鍵字
- 后記
Swift PlayGround
所謂 “工欲善其事,必先利其器”,要想更好地學習 Swift 的語法,我們也需要合理使用開發工具 Xcode,通往們是通過 PlayGround 來進行 Swift 的語法練習,
我們可以通過 File -> New -> PlayGround(如下圖所示),新建一個 PlayGround,

接著選擇 Black -> Next,完成 PlayGround 的創建,

為了方便劃分我們的單元練習,PlayGround 還支持多 Page 功能,每個 PlayGround Page 可以保存一份練習的 Swift 代碼,我們可以通過下面兩種方法新建 PlayGround Pag,
方法一:點擊 File -> New -> PlayGround Page

方法二:雙擊 PlayGround 名稱,選擇 New PlayGround Page,

Swift 語法
可選型別與nil
在 OC 中,nil 只能賦值給 OC 物件,表示一個不指向任何物件的指標,而在 Swift 中,nil 意義有所不同,它表示值缺失(即沒有值)的情況,可以用于任意型別的值缺失(包括基本型別、列舉、結構體和物件等),
可選型別表示的是該型別的變數的值有可能出現缺失的情況,在型別后面加上 ? 就可以表示可選型別,如下所示:
// 可選型別,沒賦值默認為 nil
var num: Int?
swift 是強型別語言,我們通常不能直接把可選型別直接賦值給基本型別,當我們確定可選型別變數一定包含值之后,可以在后面添加 ! 來取值,
var num: Int? = 1024
// 對可選型別進行強決議(要確保它有值)
var specialNum: Int = num!
忽略引數標簽
我們在宣告函式的時候,需要把寫明引數名,然后與之相對地,在呼叫函式的時候也需要寫上引數名,如下面代碼所示:
func sayHello(name: String) {
print("Hello, \(name)~")
}
// 在呼叫的時候,需要把引數名 name: 帶上
sayHello(name: "Veggie")
有時候,我們會覺得這樣帶引數名的函式呼叫方式比較麻煩,希望可以在呼叫的時候忽略它,這時,我們可以用忽略引數標簽 _ 來簡化它,用法如下面代碼所示,
// 在引數標簽前面加上 _
func sayHello(_ name: String) {
print("Hello, \(name)~")
}
// 函式呼叫時可以不需要
sayHello("Veggie")
可變引數
Swift 像其他高級語言一樣,它的函式也支持可變引數的輸入,一個可變引數可以接收零個或多個引數,可以使用在引數個數不確定的場景,我們通過在引數后面添加 ... 來定義可變引數,需要注意的是,一個函式只能有一個可變引數,使用例子如下所示:
func arithmeticMean(_ numbers: Double...) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
// 輸出 3.0, 是這 5 個數的平均數,
print(arithmeticMean(1, 2, 3, 4, 5))
// 輸出 10.0, 是這 3 個數的平均數,
print(arithmeticMean(3, 8.25, 18.75))
可以看到可變引數在傳入函式后會變成對應型別的陣列,因此我們在大多是場景中可以直接使用陣列代替,
inout 關鍵字
進行函式呼叫的時候,我們傳參默認都是進行值傳遞,在函式內部改變引數的值,不會引起函式外部變數的改變,當我們希望進行參考傳遞的時候,可以用上 inout 關鍵字,在傳參的時候,傳入的變數需要用 & 修飾,是 C 語言類似,
// 交換 a 和 b 的值
func swapValue(_ v1: inout Int, _ v2: inout Int) {
let temp = v1
v1 = v2
v2 = temp
}
var a: Int = 1, b: Int = 2
// 傳入的引數需要加上 &,進行地址傳遞
swapValue(&a, &b)
// 列印變數交換后的結果
print(a, b)
需要注意的是:
- 可變的引數不能標記為
inout - 標記為
inout的引數不能帶默認值
后記
Swift 語法的快速學習,只是為了幫助我們快速看懂 Swift 專案中的代碼,能夠窺探其他人的編程思路,并能對現有的代碼進行簡單的定制化修改,
如果希望能熟練使用 Swift 語言,關鍵還是要自己多寫,可以多利用新學的語法寫小 Demo, 或者刷 LeetCode 題目,語法使用得多了,就很容易形成肌肉記憶,所謂的「Practice makes perfect」就是如此吧,
內容在持續更新中……
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/339195.html
標籤:其他
