天天看點

Swift2.0--文檔學習筆記

最近把 《The Swift Programming Language 中文版》粗略地看了一遍,并随手留了點筆記,以備忘。

1、閉包,通過閉包對字元串數組進行排序,閉包的函數體部分由關鍵字in引入

names.sort( { (s1: String, s2: String) -> Bool in return s1 < s2 } )

names.sort( { s1, s2 in return s1 > s2 } )(類型推斷,推斷參數類型)

names.sort( { s1, s2 in s1 > s2 } )(隐式傳回,推斷傳回什麼類型)

names.sort( { $0 > $1 } )   (參數名縮寫,參數順序調用)

names.sort(>)(運算符函數,swift自動推斷)

2、尾随閉包的使用

let digitNames = [
0: "Zero", 1: "One", 2: "Two",   3: "Three", 4: "Four",
5: "Five", 6: "Six", 7: "Seven", 8: "Eight", 9: "Nine"
]
let numbers = [16, 58, 510]
let strings = numbers.map {
(var number) -> String in
var output = ""
while number > 0 {
output = digitNames[number % 10]! + output
number /= 10
}
return output
}
println(strings)
輸出:[OneSix, FiveEight, FiveOneZero]
           

3、嵌套函數的捕獲值

//傳入Int ,傳回()->Int
//被傳入的Int被潛逃函數捕獲,并持有,不斷累加。
func makeIncrementor(forIncrement amount: Int) -> () -> Int {
var runningTotal = 0
func incrementor() -> Int {
runningTotal += amount
return runningTotal
}
return incrementor
}

override func viewDidLoad() {
super.viewDidLoad()

let dd = makeIncrementor(forIncrement: 7)
println(dd())   //7
println(dd())   //14

let ee = dd
println(ee())   //21
           

4、Swift 中字元串(String),數組(Array)和字典(Dictionary)類型均以結構體的形式實作。這意味着String,Array,Dictionary類型資料被指派給新的常量或變量,或者被傳入函數或方法中時,它們的值會發生拷貝行為(值傳遞方式)。

5、延遲存儲屬性(lazy)來避免複雜類中不必要的初始化。

6、可以通過把方法,屬性或下标腳本标記為final來防止它們被重寫

7、循環引用的解決方式

Person和Apartment的例子展示了兩個屬性的值都允許為nil,并會潛在的産生循環強引用。這種場景最适合用弱引用來解決。

Customer和CreditCard的例子展示了一個屬性的值允許為nil,而另一個屬性的值不允許為nil,這也可能會産生循環強引用。這種場景最适合通過無主引用來解決。

兩個屬性都必須有值,并且初始化完成後永遠不會為nil。在這種場景中,需要一個類使用無主屬性,而另外一個類使用隐式解析可選屬性。

解決閉包引起的循環強引用,通過定義捕獲清單。

8、internal:可以通路自己子產品中源檔案裡的任何實體,但是别人不能通路該子產品中源檔案裡的實體。

9、Swift中的private通路和其他語言中的private通路不太一樣,它的範圍限于整個源檔案,而不是聲明。

10、元組的通路級别與元組中通路級别最低的類型一緻。

11、子類的通路級别不得高于父類的通路級别。