swift学习文档(笔记)

2020-01-08 22:43:23刘景俊

使用闭包可以表示为:


let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
 
var reversed = sort(names, {(s1:String, s2:String) -> Bool in
 return s1 > s2
})
println(reversed)
// reversed is equal to ["Ewa", "Daniella", "Chris", "Barry", "Alex"]

也可以简化为


let names = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
 
var reversed = sort(names, { s1, s2 in s1 > s2 } )
 
println(reversed)

枚举

通过下面的语法声明


enum Barcode {
 case UPCA(Int, Int, Int) = (1,2,3)
 case QRCode(String) = "hello"
}

类与结构体

推荐使用首字母大写来命名


struct Resolution {
 var width = 0
 var heigth = 0
}
class VideoMode {
 var resolution = Resolution()
 var interlaced = false
 var frameRate = 0.0
 var name: String?
}

生成实例:


let someResolution = Resolution()
let someVideoMode = VideoMode()

属性访问与修改,使用.语法:


println("The width of someVideoMode is (someVideoMode.resolution.width)")
someVideoMode.resolution.width = 12880
println("The width of someVideoMode is now (someVideoMode.resolution.width)")

结构体有自动成员初始化器,类实例没有:


let vga = resolution(width:640, heigth: 480)

结构体与枚举都是值类型,类是引用类型

对于引用了同一个实例的值,可以使用===和!==来进行判断

延迟属性,@lazy,设置在调用的时候才初始化特定的属性


class DataImporter {
 /*
 DataImporter 是一个将外部文件中的数据导入的类。
 这个类的初始化会消耗不少时间。
 */
 var fileName = "data.txt"
 // 这是提供数据导入功能
}
 
class DataManager {
 @lazy var importer = DataImporter()
 var data = String[]()
 // 这是提供数据管理功能
}
 
let manager = DataManager()
manager.data += "Some data"
manager.data += "Some more data"
// DataImporter 实例的 importer 属性还没有被创建

类、结构体、枚举都可以通过设置setter与getter来