美文网首页swift学习
Swift:Deep in Safety

Swift:Deep in Safety

作者: inclee | 来源:发表于2016-11-29 15:23 被阅读7次

    前言

    我们知道Swift语言是按照安全的目标去设计的,那么这些设计具体体现在那些方面的?

    安全设计的体现

    Swfit是强类型语言

    当你给函数赋一个类型不匹配的值的时候,编译器会报错
    当你给变量赋一个类型不匹配的值的时候,编译器会报错
    当你用操作符号操作类型不匹配的操作的时候,编译器也会报错
    .....
    实质就是:Swift是强类型语言,不允许给一个量赋类型不匹配的值

    变量在使用前,必须初始化

    访问一个未经初始化的对象的行为是未知的。即使是常量,声明的时候可以不初始化,但真正的get之前一定要初始化,并且只能设置一次值

    更加安全的nil处理(Optional的杰作)

    明确统一的处理,nil,NSNotfound,xxxMax等情况,并且在处理Optional值的时候编译器强制要求你考虑Optional为nil的情况,再也不用担心漏掉处理nil而导致服务器宕机或者客户端的Crash了。所以有了Optional,let,value type...这些设计的保障,蛮期待Swift在服务器端编程的表现

    程序员应该避免这些非安全的做法

    Swift的Implicitly unwrapping optionals(隐式解包)和强制解包

    var y:int!=5;y=nil;y.....crash

    as! 类型转换

    父类存储了子类的实例,将这个实例转换为子类是经常要处理的情况,但是你能非常明确的知道,到底是哪一个子类么?所有类型转换有两个步骤要处理,确定实例类型,进行类型转变。
    Swift中类型转换有两种方式,safe ,unsafe
    unsafe:不检查实例类型,直接转换解包
    <pre>
    let imageView = view as! UIImageView
    </pre>
    safe:
    <pre>
    if let view = view as? UIImageView { view.image = UIImage(named: "image")
    }
    </pre>

    尽量使用非逃逸闭包

    关于逃逸闭包和非逃逸闭包,以及一些处理的细节,参考:http://swift.gg/2016/11/15/optional-non-escaping-closures/

    相关文章

      网友评论

        本文标题:Swift:Deep in Safety

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