swift 使用心得---未完待續

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.
發佈了175 篇原創文章 · 獲贊 34 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章