使用闭包可以表示为:
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来








