swift3.0三种as的用法

在用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! 进行接收

                                                            谢谢大家

你可能感兴趣的:(swift3.0三种as的用法)