swift学习文档(笔记)

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


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”