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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,885评论 1 10
  • 1、随机数 不需要随机数种子 arc4random()%N + begin:产生begin~begin+N的随机数...
    我是小胡胡123阅读 4,223评论 0 2
  • 一直没有时间好好看一下swift,最近复习了一遍语法,这里记录swift学习过程中遇到的一些问题和要点,和Obje...
    bomo阅读 2,405评论 0 25
  • 关于 Swift 重要这个文档所包含的准备信息, 是关于开发的 API 和技术的。这个信息可能会改变, 根据这个文...
    无沣阅读 4,378评论 1 27
  • 基础部分(The Basics) 当推断浮点数的类型时,Swift 总是会选择Double而不是Float。 结合...
    gamper阅读 1,333评论 0 7