在用swift3.0开发完项目之后感觉很有必要写一写项目中遇到的坑,记录下来 以便于后来者少走弯路 现在就聊聊关键字as的用法吧
// as
fileprivate func test1(){
// as :用在有保证的转换,从派生类->基类 (向上转换)
// example
let image = UIImage.init(named: "")
let data0 = UIImageJPEGRepresentation(image!, 1)!
// data0为Data类型 Data类型的引用类型是NSData(意思就是Data就是NSData衍生而来的) 即应该这样写
_ = data0 as NSData
}
// as!
fileprivate func test2(){
// as! 强项转换,子类(派生类)->父类,这个关键字用起来存在一定危险性 一定要保证强制转换后有值才可以去用它 否则程序可能崩溃
// 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 错误 奔溃 dict里面没有icon字段
print(str0)
}
// as?
fileprivate func test3(){
// as? (optional可选类型 意思是可有可无) 无的话会返回一个 nil 对象。有的话返回可选类型值(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字段
}
总结
//1.开发中 用的最多的就是as?关键字,但是要进行非空判断 if let ,guard 保证程序正常进行下去
//2.其次as! 如果用as!的话,一定要保证有值,一定要保证有值,一定要保证有值,
//3.然后as(这个关键字一般都是系统智能提示要用这个)
//4.开发中要是接收后台返回的字段建议最好用可选类型 as? 后台的情况千变万化 尽量不适用as! 进行接收
谢谢大家