struct AlternativeRect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set { //这里setter 没有定义表示新值的参数名,则可以使用默认名称newValue
origin.x = newValue.x - (size.width / 2)
origin.y = newValue.y - (size.height / 2)
}
}
}
只读属性去掉get与set
属性监视可以使用willset和didset来处理
类型属性有点像静态变量,以static关键字声明
struct SomeStructure {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
// 这里返回一个 Int 值
}
}
下标
类、结构体、枚举都可以有下标,它有像给它们增加了一个快捷方式,如下:
struct TimesTable {
let multiplier: Int
subscript(index: Int) -> Int {
return multiplier * index
}
}
let threeTimesTable = TimesTable(multiplier: 3)
println("3的6倍是(threeTimesTable[6])")
// 输出 "3的6倍是18"
继承
定义一个类
class Vehicle {
var numberOfWheels: Int
var maxPassengers: Int
func description() -> String {
return "(numberOfWheels) wheels; up to (maxPassengers) passengers"
}
init() {
numberOfWheels = 0
maxPassengers = 1
}
}
继承类
class Bicycle: Vehicle {
init() {
super.init()
numberOfWheels = 2
}
}
重写属性与方法
class Car: Vehicle {
var speed: Double = 0.0
override var speed: Double {
get {
return super.speed
}
set {
super.speed = min(newValue, 40.0)
}
}
init() {
super.init()
maxPassengers = 5
numberOfWheels = 4
}
override func description() -> String {
return super.description() + "; "
+ "traveling at (speed) mph"
}
}
防止重写,在方法与属性前加关键字@final,编译时会出错
构造函数
声明里可以写多个init,这有点像重载
struct Celsius {
var temperatureInCelsius: Double = 0.0
init(fromFahrenheit fahrenheit: Double) {
temperatureInCelsius = (fahrenheit - 32.0) / 1.8
}
init(fromKelvin kelvin: Double) {
temperatureInCelsius = kelvin - 273.15
}
}
let boilingPointOfWater = Celsius(fromFahrenheit: 212.0)
// boilingPointOfWater.temperatureInCelsius 是 100.0
let freezingPointOfWater = Celsius(fromKelvin: 273.15)
// freezingPointOfWater.temperatureInCelsius 是 0.0”








