前言
我們知道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/