對(duì)于經(jīng)常不習(xí)慣在網(wǎng)上發(fā)表文章的孩子阻塑,我覺得要開始改變一下自己,給自己養(yǎng)成一個(gè)好的習(xí)慣果复,也是給自己過去一段時(shí)間學(xué)習(xí)的總結(jié)陈莽,溫故而知新,覺得還是很有必要的据悔!
好了传透,閑話不多說,說多了我怕剎不住車极颓,變成不是技術(shù)總結(jié)了,可能變成心里路程了群嗤,O(∩_∩)O哈哈~
對(duì)于從事iOS開發(fā)的工作者菠隆,我想遲早都要奔著Swift去的,對(duì)于Swift也學(xué)習(xí)了挺久一段時(shí)間狂秘,也投入到了項(xiàng)目中使用骇径,說說我的初步感受,這個(gè)語言用習(xí)慣了寫起來是真的順手者春,看著也是舒服破衔,不過就是Xcode可能是不太適應(yīng)這個(gè)新孩子,會(huì)挺容易崩潰的钱烟,聯(lián)想也不是太順暢晰筛。
1.對(duì)于Swift就不得不說到 Swift的可選類型(Optional Type)
什么是optional?
在Swift中聲明的一個(gè)變量時(shí), 默認(rèn)情況下它是non-optional(非可選), 即必須給這個(gè)變量賦一個(gè)非空的值. 如果給non-optional(非可選)類型的變量賦值nil, 編譯器就會(huì)報(bào)錯(cuò)。
Swift中, 當(dāng)聲明一個(gè)類的屬性時(shí), 屬性默認(rèn)也是non-optional的
var string1: String = "hello" // OK
string1 = nil // 這樣就會(huì)報(bào)錯(cuò)
聲明成可選類型
class MyClass { var name: String? // }
2.Swift中的各種控制語句
- Continue
continue語句告訴一個(gè)循環(huán)體立刻停止本次循環(huán)拴袭,重新開始下次循環(huán)读第。就好像在說“本次循環(huán)我已經(jīng)執(zhí)行完了”,但是并不會(huì)離開整個(gè)循環(huán)體拥刻。 - Break
break語句會(huì)立刻結(jié)束整個(gè)控制流的執(zhí)行怜瞒。當(dāng)你想要更早的結(jié)束一個(gè)switch代碼塊或者一個(gè)循環(huán)體時(shí),你都可以使用break語句般哼。
控制流
- Swift提供了多種流程控制結(jié)構(gòu)吴汪,包括可以多次執(zhí)行任務(wù)的while循環(huán),基于特定條件選擇執(zhí)行不同代碼分支的if蒸眠、guard和switch語句漾橙,還提供了for-in循環(huán)
帶標(biāo)簽的語句
在 Swift 中,你可以在循環(huán)體和條件語句中嵌套循環(huán)體和條件語句來創(chuàng)造復(fù)雜的控制流結(jié)構(gòu)黔宛。并且近刘,循環(huán)體和條件語句都可以使用break語句來提前結(jié)束整個(gè)代碼塊擒贸。因此,顯式地指明break語句想要終止的是哪個(gè)循環(huán)體或者條件語句觉渴,會(huì)很有用介劫。類似地,如果你有許多嵌套的循環(huán)體案淋,顯式指明continue語句想要影響哪一個(gè)循環(huán)體也會(huì)非常有用座韵。
為了實(shí)現(xiàn)這個(gè)目的,你可以使用標(biāo)簽(statement label)來標(biāo)記一個(gè)循環(huán)體或者條件語句踢京,對(duì)于一個(gè)條件語句誉碴,你可以使用break加標(biāo)簽的方式,來結(jié)束這個(gè)被標(biāo)記的語句瓣距。對(duì)于一個(gè)循環(huán)語句黔帕,你可以使用break或者continue加標(biāo)簽,來結(jié)束或者繼續(xù)這條被標(biāo)記語句的執(zhí)行蹈丸。
聲明一個(gè)帶標(biāo)簽的語句是通過在該語句的關(guān)鍵詞的同一行前面放置一個(gè)標(biāo)簽成黄,作為這個(gè)語句的前導(dǎo)關(guān)鍵字(introducor keyword),并且該標(biāo)簽后面跟隨一個(gè)冒號(hào)逻杖。下面是一個(gè)針對(duì)while循環(huán)體的標(biāo)簽語法奋岁,同樣的規(guī)則適用于所有的循環(huán)體和條件語句。
label name: while condition { statements }
- 提前退出guard
像if語句一樣荸百,guard的執(zhí)行取決于一個(gè)表達(dá)式的布爾值闻伶。我們可以使用guard語句來要求條件必須為真時(shí),以執(zhí)行g(shù)uard語句后的代碼够话。不同于if語句蓝翰,一個(gè)guard語句總是有一個(gè)else從句,如果條件不為真則執(zhí)行else從句中的代碼更鲁。如果guard語句的條件被滿足霎箍,則繼續(xù)執(zhí)行g(shù)uard語句大括號(hào)后的代碼。將變量或者常量的可選綁定作為guard語句的條件澡为,都可以保護(hù)guard語句后面的代碼
還有一點(diǎn)值得注意的地方是結(jié)構(gòu)體和枚舉是值類型
值類型被賦予給一個(gè)變量漂坏、常量或者被傳遞給一個(gè)函數(shù)的時(shí)候,其值會(huì)被拷貝媒至。
實(shí)際上顶别,在 Swift 中,所有的基本類型:整數(shù)(Integer)拒啰、浮點(diǎn)數(shù)(floating-point)驯绎、布爾值(Boolean)、字符串(string)谋旦、數(shù)組(array)和字典(dictionary)剩失,都是值類型屈尼,并且在底層都是以結(jié)構(gòu)體的形式所實(shí)現(xiàn)。
在 Swift 中拴孤,所有的結(jié)構(gòu)體和枚舉類型都是值類型脾歧。這意味著它們的實(shí)例,以及實(shí)例中所包含的任何值類型屬性演熟,在代碼中傳遞的時(shí)候都會(huì)被復(fù)制鞭执。即形成一個(gè)新的對(duì)象
- 類是引用類型
與值類型不同,引用類型在被賦予到一個(gè)變量芒粹、常量或者被傳遞到一個(gè)函數(shù)時(shí)兄纺,其值不會(huì)被拷貝。因此化漆,引用的是已存在的實(shí)例本身而不是其拷貝估脆。
-
方法的拋出異常的處理
-
關(guān)于構(gòu)造函數(shù)的
-
關(guān)于事件監(jiān)聽
-
事件的監(jiān)聽機(jī)制: 將方法包裝成@sel放在類的方法列表中 然后在類的方法列表中找
根據(jù)@sel找到imp指針(函數(shù)指針) 最后執(zhí)行函數(shù)
強(qiáng)大的 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)
}
}
第一次就簡(jiǎn)單介紹到這里!沒什么干貨获三,就是來認(rèn)認(rèn)門旁蔼,先混個(gè)熟臉,后續(xù)再跟新別的~