1.swift的設計目標之一是一門安全的語言(designed for safety),更加清晰明確的訪問權限控制可以使程序員表達出更準確的意圖,也迫使在編程時候思考更加深入。swift中訪問權限依次爲:open,public,internal,fleprivate,private.
2.guard語句和if語句相同的是,guard也是基於一個表達式的布爾值去判斷一段代碼是否應該被執行;與if語句不同的則是guard只有在條件不滿足的時候纔會執行這一段代碼,可以把guard近似的看做是Assert,但是可以優雅的退出而非崩潰。當guard else語句的else執行的時候就是條件滿足的情況,guard執行的時候就是條件不滿足。
3.在swift中,通過assert實現斷言,assert可以幫助開發者比較榮的發現和定位錯誤,一個斷言斷定條件是true,通過聲明一個斷言來確保某個必要條件是滿足的,以便繼續像往常一樣執行,如果不滿足了,代碼就停止執行,應用也隨之停下來。例如:
let number = 3//第一個參數爲判斷條件,第二個參數爲條件"不滿足"時的打印信息。assert(number > 3, "number 不大於3")//如果斷言被觸發(number <= 3時),將會強制結束程序,並打印相關信息:assertion failed: number 不大於3: file /Users/mac/Desktop/test/test/ViewController.swift,
line 17
注意點:
斷言可以引發程序終止,並不是被設計用來避免不在發生無效情況的。在那些無效條件遊客鞥出發的情況下,斷言是一種有效的調試手段,可以確保在應用發佈之前,在開發過程中就可以關注這些條件。
使用場景:
在條件有可能爲false的情況,但是只有在true的情況下纔可以繼續運行代碼,使用斷言。比如下面的情況:
-
自定義整型下標傳給自定義索引實現的參數時,下標表達式的值有可能太大或者太小
-
向函數傳值的時候,一個無效值意味着函數不能完成相應的任務
-
一個Optional類型目前爲nil,但是必須要有一個非nil值以便接下來的代碼可以成功的執行
4.swift中willSet和didSet這兩個特性來監視屬性除初始化之外的屬性值變化。舉例如下:
import Foundation
class People : NSObject
{ //普通屬性 var firstName:String =
"" var lastName:String =
"" var nickName:String =
""
//計算屬性 var fullName:String { get { return nickName +
"
" + firstName +
"
" + lastName } }
//帶屬性監視器的普通屬性 var age:Int =
0 {
//我們需要在age屬性變化前做點什麼 willSet { println("Will
set an new value \(newValue) to age") }
//我們需要在age屬性發生變化後,更新一下nickName這個屬性 didSet { println("age
filed changed form \(oldValue) to \(age)")
if age<10
{ nickName = "Little" }else
{ nickName = "Big" } } } func toString() -> String { return
"Full Name: \(fullName) " +
", Age: \(age) " } }var me = People()me.firstName =
"Zhang"me.lastName =
"San"me.age =
20println(me.toString())
/*程序輸出Will set an new value 20 to ageage filed changed form 0 to 20Full Name: Big Zhang San , Age: 20*/
5.localizable.string 語言本地化,又叫做語言國際化。是指根據用戶操作系統的語言設置,自動將應用程序的語言設置爲和用戶操作系統語言一致的語言。往往一些應用程序需要提供給多個國家的人羣使用,或者一個國家有多種語言,這就要求應用程序所展示的文字、圖片等信息,能夠讓講不同語言的用戶讀懂、看懂。進而提出爲同一個應用程序適配多種語言,也即是國際化。具體使用的話這裏有一片文章專門講解這一部分內容:
6.三木運算符:
形式:( ? : ) , "(a<b)?a:b"是一個"條件表達式",它是這樣執行的: 如果a<b爲真,則表達式取a值,否則取b值.
7.deinit的說明
deinit屬於析構函數
析構函數(destructor) 與構造函數相反,當對象結束其生命週期時(例如對象所在的函數已調用完畢),系統自動執行析構函數
和OC中的dealloc 一樣的,通常在deinit和dealloc中需要執行的操作有:
-
對象銷燬
-
KVO移除
-
移除通知
-
NSTimer銷燬
8.