對于經常不習慣在網上發表文章的孩子,我覺得要開始改變一下自己,給自己養成一個好的習慣,也是給自己過去一段時間學習的總結,溫故而知新,覺得還是很有必要的!
好了,閑話不多說,說多了我怕剎不住車,變成不是技術總結了,可能變成心里路程了,O(∩_∩)O哈哈~
對于從事iOS開發的工作者,我想遲早都要奔著Swift去的,對于Swift也學習了挺久一段時間,也投入到了項目中使用,說說我的初步感受,這個語言用習慣了寫起來是真的順手,看著也是舒服,不過就是Xcode可能是不太適應這個新孩子,會挺容易崩潰的,聯想也不是太順暢。
1.對于Swift就不得不說到 Swift的可選類型(Optional Type)
什么是optional?
在Swift中聲明的一個變量時, 默認情況下它是non-optional(非可選), 即必須給這個變量賦一個非空的值. 如果給non-optional(非可選)類型的變量賦值nil, 編譯器就會報錯。
Swift中, 當聲明一個類的屬性時, 屬性默認也是non-optional的
var string1: String = "hello" // OK
string1 = nil // 這樣就會報錯
聲明成可選類型
class MyClass { var name: String? // }
2.Swift中的各種控制語句
- Continue
continue語句告訴一個循環體立刻停止本次循環,重新開始下次循環。就好像在說“本次循環我已經執行完了”,但是并不會離開整個循環體。 - Break
break語句會立刻結束整個控制流的執行。當你想要更早的結束一個switch代碼塊或者一個循環體時,你都可以使用break語句。
控制流
- Swift提供了多種流程控制結構,包括可以多次執行任務的while循環,基于特定條件選擇執行不同代碼分支的if、guard和switch語句,還提供了for-in循環
帶標簽的語句
在 Swift 中,你可以在循環體和條件語句中嵌套循環體和條件語句來創造復雜的控制流結構。并且,循環體和條件語句都可以使用break語句來提前結束整個代碼塊。因此,顯式地指明break語句想要終止的是哪個循環體或者條件語句,會很有用。類似地,如果你有許多嵌套的循環體,顯式指明continue語句想要影響哪一個循環體也會非常有用。
為了實現這個目的,你可以使用標簽(statement label)來標記一個循環體或者條件語句,對于一個條件語句,你可以使用break加標簽的方式,來結束這個被標記的語句。對于一個循環語句,你可以使用break或者continue加標簽,來結束或者繼續這條被標記語句的執行。
聲明一個帶標簽的語句是通過在該語句的關鍵詞的同一行前面放置一個標簽,作為這個語句的前導關鍵字(introducor keyword),并且該標簽后面跟隨一個冒號。下面是一個針對while循環體的標簽語法,同樣的規則適用于所有的循環體和條件語句。
label name: while condition { statements }
- 提前退出guard
像if語句一樣,guard的執行取決于一個表達式的布爾值。我們可以使用guard語句來要求條件必須為真時,以執行guard語句后的代碼。不同于if語句,一個guard語句總是有一個else從句,如果條件不為真則執行else從句中的代碼。如果guard語句的條件被滿足,則繼續執行guard語句大括號后的代碼。將變量或者常量的可選綁定作為guard語句的條件,都可以保護guard語句后面的代碼
還有一點值得注意的地方是結構體和枚舉是值類型
值類型被賦予給一個變量、常量或者被傳遞給一個函數的時候,其值會被拷貝。
實際上,在 Swift 中,所有的基本類型:整數(Integer)、浮點數(floating-point)、布爾值(Boolean)、字符串(string)、數組(array)和字典(dictionary),都是值類型,并且在底層都是以結構體的形式所實現。
在 Swift 中,所有的結構體和枚舉類型都是值類型。這意味著它們的實例,以及實例中所包含的任何值類型屬性,在代碼中傳遞的時候都會被復制。即形成一個新的對象
- 類是引用類型
與值類型不同,引用類型在被賦予到一個變量、常量或者被傳遞到一個函數時,其值不會被拷貝。因此,引用的是已存在的實例本身而不是其拷貝。
-
方法的拋出異常的處理
-
關于構造函數的
-
關于事件監聽
-
事件的監聽機制: 將方法包裝成@sel放在類的方法列表中 然后在類的方法列表中找
根據@sel找到imp指針(函數指針) 最后執行函數
強大的 guard else 提前退出 和 if let 可選綁定 可以多變的解決很多邏輯問題
func guardLet() {
let bcG: String? = "gurad"
let bcA: String? = "let"
// guard else 的多種邏輯用法
guard bcG == bcA else {
return
}
print("相等")
guard let g = bcG, let a = bcA else {
return
}
print(a + g)
guard var vg = bcG, var va = bcA else {
return
}
vg = "vg"
va = "va"
print(vg + va)
// 可選綁定的條件邏輯
if let bg = bcG, bg.isEmpty {
print(bg)
}
if var bg = bcG ,var ba = bcA {
bg = "bg"
ba = "ba"
print(bg + ba)
}
if let bg = bcG ,let ba = bcA {
print(bg + ba)
}
}
第一次就簡單介紹到這里!沒什么干貨,就是來認認門,先混個熟臉,后續再跟新別的~