美文网首页
swift3.0三种as的用法

swift3.0三种as的用法

作者: 毛大虎 | 来源:发表于2017-12-11 11:17 被阅读17次

    在用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的用法

          本文链接:https://www.haomeiwen.com/subject/fjciixtx.html