从速度上来说,struct会好过于class。Swift的struct比Objective-C的struct要强大许多,比如:
自定义init():虽然Swift和Objective-C一样提供默认的init (default memberwise initializer),但是你可以在Swift中定义自己的init(),如:
struct Student {
let studentId: String // studentId 和 name 必须赋值
var name: String
var birthday: NSDate? // optional
var gender = 0 // 给一个默认的值
// 自定义init()
init(sid:String) {
studentId = sid // self. 是可选的
// 但是你必须提供所有非optional,没有默认值的stored property的初始值
name = "A Name" // 没有此条会报错
}
}
当你提供了自定义的init后,Swift就不提供默认的memberwise init了。如果你需要同时保留,可以把自定义的init写在extension里面:
extension Student {
init(sid: String) {
// ...
}
}
struct可以有方法,下面为Student添加一个描述方法
func summary() -> String {
return "\(name) is born on \(birthday)"
}
struct的方法如果需要改变ivar的值,那必须添加mutating关键词
mutating func changeName(name:String) {
self.name = name // 没有mutating的话,此条报错
// 当然在这里改变 studentId 还是不可以的,因为它是let
}
struct也可以implement protocol,但是功能非常局限。大多数protocols还是class-only的。