아래의 글은 The swift programming language과 bbiguduk님, jusung님의 번역본을 보며 공부한 내용입니다.
클래스의 가장 큰 특징 중 하나
메소드, 프로퍼티 등 특징을 다른 클래스로부터 상속받을 수 있음
상속받은 프로퍼티에 프로퍼티 옵저버를 설정해서 값 설정에 반응할 수 있음
기반 클래스: 다른 어떤 클래스로부터도 상속받지 않은 클래스
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) miles per hour"
}
func makeNoise() {
// do nothing - an arbitrary vehicle doesn't necessarily make a noise
}
}
class Bicycle: Vehicle {
var hasBasket = false
}
class Tandem: Bicycle {
var currentNumberOfPassengers = 0
}
let tandem = Tandem()
tandem.hasBasket = true
tandem.currentNumberOfPassengers = 2
tandem.currentSpeed = 22.0
print("Tandem: \(tandem.description)")
// Tandem: traveling at 22.0 miles per hour
override
: 이 키워드가 등장하면 Swift에서는 부모 클래스에 해당 정의가 있는지 확인함super
를 사용하여 부모 클래스 속성에 접근할 수 있음class Train: Vehicle {
override func makeNoise() {
print("Choo Choo")
}
}
class Car: Vehicle {
var gear = 1
override var description: String {
return super.description + " in gear \(gear)"
}
}
let car = Car()
car.currentSpeed = 25.0
car.gear = 3
print("Car: \(car.description)")
// Car: traveling at 25.0 miles per hour in gear 3
- let property, read-only property에는 옵저버 붙일 수 없음 (값이 set될 수 없기 때문에)
- setter와 프로퍼티 옵저버를 동시에 사용하는 것도 불가능 (setter가 이미 옵저버를 붙인 것과 같이 동작하기 때문에)
class AutomaticCar: Car {
override var currentSpeed: Double {
didSet {
gear = Int(currentSpeed / 10.0) + 1
}
}
}
fianl