記錄一下自學(xué)swift的語法知識。
只記錄一些典型的喜命,自己容易忘記的扒最。
/邏輯分支
//if 后面的()可以省略
//判斷語句不再有非0/nil即真,判斷句必須有明確的真假(true /false)
//三目
//取兩者之間大的數(shù)
letmmm =20
lethhh =30
varresl =0
resl=mmm>hhh?mmm:hhh
//guard只能在函數(shù)中使用
//guard語句必須帶有else語句稳强,它的語法如下:
//當(dāng)條件表達(dá)式為true時候跳過else語句中的內(nèi)容,執(zhí)行語句組內(nèi)容
//條件表達(dá)式為false時候執(zhí)行else語句中的內(nèi)容和悦,跳轉(zhuǎn)語句一般是return退疫、break、continue和throw
//判斷一個人能不能去
//1. switch 后面的()可以省略
//2. case 語句結(jié)束后鸽素,break 可以省略
//在swfit 中褒繁,如果一個標(biāo)識符不需要使用,就可以用下劃線代替
for_in0...3{
print("hh")
}
數(shù)組
字典
元組
可選類型
函數(shù)
類屬性的監(jiān)聽
在OC中我們可以重寫set方法來監(jiān)聽屬性的改變
Swift中可以通過屬性觀察者來監(jiān)聽和響應(yīng)屬性值的變化
通常是監(jiān)聽存儲屬性和類屬性的改變.(對于計算屬性馍忽,我們不需要定義屬性觀察者棒坏,因為我們可以在計算屬性的setter中直接觀察并響應(yīng)這種值的變化)
我們通過設(shè)置以下觀察方法來定義觀察者
willSet:在屬性值被存儲之前設(shè)置。此時新屬性值作為一個常量參數(shù)被傳入遭笋。didSet:在新屬性值被存儲后立即調(diào)用坝冕。
willSet與didSet只有在屬性第一次被設(shè)置時才會調(diào)用,在初始化時坐梯,不會去調(diào)用這些監(jiān)聽方法
閉包
閉包和OC中的block非常相似
OC中的block是匿名的函數(shù)
Swift中的閉包是一個特殊的函數(shù)
block和閉包都經(jīng)常用于回調(diào)
進(jìn)行網(wǎng)絡(luò)請求,請求到數(shù)據(jù)后利用閉包進(jìn)行回調(diào)
調(diào)用
解決閉包中的循環(huán)引用
方法1:
方法2:
方法3
懶加載
swift中也有懶加載的方式
(蘋果的設(shè)計思想:希望所有的對象在使用時才真正加載到內(nèi)存中)
和OC不同的是swift有專門的關(guān)鍵字來實現(xiàn)懶加載
lazy關(guān)鍵字可以用于定義某一個屬性懶加載
自定義log
在實際開發(fā)中徽诲,我們經(jīng)常需要自定義log來顯示更多的信息刹帕。
swift的全局函數(shù)定義在appdelegate 中吵血,抽取出來。在debug狀態(tài)下顯示打印偷溺。
swfit 中的異常處理
//如果調(diào)用系統(tǒng)的某個方法的時候蹋辅,該方法最后會有一個throw。說明該方法會拋出異常挫掏。如果一個方法會拋出異常侦另,需要對異常進(jìn)行處理。
方式1:try方式。程序員手動處理異常
do{
try 可能拋出異常的代碼
}catch{
// error 異常的對象
print(error)
}
方式2: tyr? 系統(tǒng)幫助我們處理異常褒傅,如果該方法出現(xiàn)了異常弃锐。則該方法返回nil,如果沒有異常,返回對應(yīng)的對象殿托。所以最后返回的類型是可選類型
guard let anyobject = try? JSONSerialization.jsonObject(with: jsonData as Data, options: .mutableContainers) else{
print("沒有值")
return
}
方式3: try!直接告訴系統(tǒng)霹菊,該方法沒有異常。如果有異常出現(xiàn)支竹,程序會崩潰旋廷,方法危險,不建議使用礼搁。
swift? 中的擴(kuò)展
在swift 中饶碘,擴(kuò)展一個button,在創(chuàng)建的時候就將背景圖片和圖片傳過去。我們有兩種寫法馒吴。創(chuàng)建一個擴(kuò)展文件扎运。import UIKit 然后 extension UIButton{}? 在括號里面實現(xiàn)。
第一種方法饮戳,類方法绪囱。
swfit 中的類方法。是以class開頭的方法莹捡,類似oc中 +開頭的方法
在調(diào)用的時候鬼吵,用點點出來。
第二中方法篮赢,構(gòu)造函數(shù)
構(gòu)造函數(shù)的方法齿椅。 UIImage(name: string)構(gòu)造函數(shù)不需要返回值,系統(tǒng)會自動幫你返回启泣。
convenience遍歷構(gòu)造函數(shù)涣脚。遍歷構(gòu)造函數(shù)通常用在對系統(tǒng)的類進(jìn)行我們的構(gòu)造函數(shù)的擴(kuò)充時使用。
遍歷構(gòu)造函數(shù)的特點:1.遍歷構(gòu)造函數(shù)通常寫在 Exstension里面
2.遍歷構(gòu)造函數(shù) init 前面需要加convenience
3.在遍歷構(gòu)造函數(shù)中需要明確的調(diào)用寥茫。self.init