在用swift3.0開發(fā)完項(xiàng)目之后感覺很有必要寫一寫項(xiàng)目中遇到的坑,記錄下來 以便于后來者少走彎路 現(xiàn)在就聊聊關(guān)鍵字as的用法吧
// as?
fileprivate func test1(){
// as :用在有保證的轉(zhuǎn)換,從派生類->基類 (向上轉(zhuǎn)換)
// example
let image = UIImage.init(named: "")
let data0 = UIImageJPEGRepresentation(image!, 1)!
// data0為Data類型 Data類型的引用類型是NSData(意思就是Data就是NSData衍生而來的) 即應(yīng)該這樣寫
_ = data0 as NSData
}
// as!
fileprivate func test2(){
// as! 強(qiáng)項(xiàng)轉(zhuǎn)換藐握,子類(派生類)->父類圈浇,這個(gè)關(guān)鍵字用起來存在一定危險(xiǎn)性 一定要保證強(qiáng)制轉(zhuǎn)換后有值才可以去用它? 否則程序可能崩潰
// example
var dict? = [String:Any]()
dict["title"] = "我是title"
let str = dict["title"] as! String //正確
print(str)
let str0 = dict["icon"] as! String
// fatal error: unexpectedly found nil while unwrapping an Optional value 錯(cuò)誤 奔潰?dict里面沒有icon字段
print(str0)
}
// as?
fileprivate func test3(){
//? as? (optional可選類型 意思是可有可無) 無的話會(huì)返回一個(gè) nil 對(duì)象邪码。有的話返回可選類型值(optional)
var dict? = [String:Any]()
dict["title"] = "我是title"
let str = dict["title"] as? String
//? print(str) //Optional("我是title")
let str0 = dict["icon"] as? String
print(str0) // nil dict里面沒有icon字段
}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 總結(jié)
//1.開發(fā)中 用的最多的就是as?關(guān)鍵字,但是要進(jìn)行非空判斷 if let ,guard 保證程序正常進(jìn)行下去
//2.其次as! 如果用as!的話,一定要保證有值,一定要保證有值,一定要保證有值,
//3.然后as(這個(gè)關(guān)鍵字一般都是系統(tǒng)智能提示要用這個(gè))
//4.開發(fā)中要是接收后臺(tái)返回的字段建議最好用可選類型? as? 后臺(tái)的情況千變?nèi)f化 盡量不適用as! 進(jìn)行接收
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 謝謝大家