老司機帶你快速熟悉Swift 4.1(一)
簡單學
1、我的第一個Swift程式
傳統表明,用新語言編寫的第一個程式應該在螢幕上列印“Hello,world!”。在Swift中,這可以在一行中完成:
在Swift中,這行程式碼是一個完整的程式。您不需要為輸入/輸出或字串處理等功能匯入單獨的庫。在全域性範圍編寫的程式碼被用作程式的入口點,所以你不需要一個main()
函式。您也不需要在每個語句的末尾都寫分號。
2、常量和變數
使用let
做一個常數,var是
一個變數。在編譯時不需要知道常量的值,但必須為其賦值一次。這意味著您可以使用常量來命名一次您確定一次但在許多地方使用的值。
常量或變數必須與要分配給它的值具有相同的型別。但是,您並不總是必須明確地寫出型別。myVariable
是一個整數,因為它的初始值是一個整數。
如果初始值沒有提供足夠的資訊(或者沒有初始值),請在變數之後寫入,並用冒號分隔來指定型別。
3、值型別
值永遠不會被隱式轉換為另一種型別。如果您需要將值轉換為其他型別,請顯式建立所需型別的例項。
4、在字串中包含值的方法更為簡單:將值寫入括號中,並在括號\
之前寫入反斜槓()。
"""
對於佔用多行的字串 使用三個雙引號()。只要符合收尾引號的縮排,每個引用行開頭的縮排就會被刪除。
5、陣列和字典
建立一個空陣列或字典,請使用初始化程式語法。
-
let emptyArray = [String]()
-
let emptyDictionary = [String:Float]()
使用括號([]
)建立陣列和字典,並通過將括號中的索引或鍵寫入它們來訪問它們的元素。在最後一個元素之後允許逗號。
控制流
1、使用if
和switch
製作條件語句
, 使用for
- in
,while
和repeat
- while
進行迴圈。 條件或迴圈變數的括號是可選的。身體周圍的括號是必需的。
在if
宣告中,條件必須是一個布林表示式
- 這意味著程式碼如if score { ... }
錯誤,而不是隱式比較為零。
2、可選值
使用if
並let
一起nil
以指示缺少值。在值的型別後面寫一個問號?()以將該值標記為可選。
處理可選值的另一種方法是使用??
運算子提供預設值。如果可選值缺失,則使用預設值。
-
let nickName:String? = nil
-
let fullName:String = "John Appleseed"
-
let informalGreeting = "Hi \(nickName ??fullName)"
3、交換機支援任何種類的資料和各種比較操作 - 它們不限於整數和相等性測試。
請注意,如何在let
模式中使用將與之模式匹配的值分配給常量。
在匹配的switch case內部執行程式碼後,程式從switch語句中退出。執行不會延續到下一個案例,因此不需要在每個案例的程式碼末尾顯式地跳出交換機。
4、字典中的for-in
for
- in
通過提供一對用於每個鍵值對的名稱來迭代字典中的專案。字典是無序集合,所以它們的鍵和值以任意順序迭代。
使用while
重複的程式碼塊,直到完成變化。迴圈的條件可以在最後,確保迴圈至少執行一次。
功能和關閉
1、函式的宣告和使用使用func
宣告函式。通過使用括號中的引數列表跟隨其名稱來呼叫函式。用 ->
從函式的返回型別中分離引數名稱和型別。
預設情況下,函式使用它們的引數名稱作為其引數的標籤。在引數名稱之前寫入自定義引數標籤,或寫入 _
以使用不帶引數標籤。
2、函式與元組
使用一個元組來建立一個複合值
- 例如,從一個函式返回多個值。元組的元素可以通過名字或數字來引用。
3、函式的巢狀
函式可以巢狀。巢狀函式可以訪問在外部函式中宣告的變數。您可以使用巢狀函式來組織長或複雜函式中的程式碼。
一個函式可以返回另一個函式作為它的值。
函式可以將另一個函式作為其引數之一。
4、函式與閉包
函式實際上是閉包的一個特例:可以稍後呼叫的程式碼塊。閉包中的程式碼可以訪問變數和函式,這些變數和函式可以在建立閉包的範圍中使用,即使閉包在執行時處於不同的範圍
- 您已經看到一個巢狀函式的例子。你可以使用花括號({}
)來編寫一個沒有名字的閉包。用於in
從正文中分離引數和返回型別。
-
numbers.map({ (number:Int) -> Int in
-
let result = 3 * number
-
return result
-
})
可以更簡潔地編寫閉包的幾個選項。當閉包的型別已知時,例如代理的回撥,可以省略其引數的型別,其返回型別或兩者。單語句閉包隱式返回其唯一語句的值。
-
let mappedNumbers = numbers.map({number in 3 * number })
-
print(mappedNumbers)
可以通過數字而不是名稱來引用引數 - 這種方法在非常短的閉包中特別有用。作為函式的最後一個引數傳遞的閉包可以在括號之後立即出現。當閉包是函式的唯一引數時,可以完全省略括號。
-
let sortedNumbers = numbers.sorted {$0 > $1 }
-
print(sortedNumbers)