天天看点

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、子类的访问级别不得高于父类的访问级别。