Swift:Deep in Safety

前言

我们知道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:不检查实例类型,直接转换解包


let imageView = view as! UIImageView

safe:

if let view = view as? UIImageView { view.image = UIImage(named: "image")
}

尽量使用非逃逸闭包

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

你可能感兴趣的:(Swift:Deep in Safety)