import UIKit
class Vehicle{
var currentSpeed = 0.0 //stored property
var description:String{ //computed property : getter의 역할
return "traveling at \(currentSpeed) miles per hour"
}
func makeNoise(){
print("noiseless")
}
}
let someVehicle = Vehicle(); //인스턴스 생성
someVehicle.currentSpeed = 1.0
print("Vehicle : \(someVehicle.description)") //Vehicle : traveling at 1.0 miles per hour
//상속
class Bicycle:Vehicle{
var hasBasket = false
}
let bicycle = Bicycle()
bicycle.hasBasket = true
bicycle.currentSpeed = 15.0
print("Bicycle : \(bicycle.description)") //Bicycle : traveling at 15.0 miles per hour
class Tandem:Bicycle{ //*Tandem = 이인용 자전거
var currentNumberOfPassengers = 0 //stored property
override var description:String{ //computed property, override - 위에꺼랑 겹쳐서 재정의
return "traveling at \(currentSpeed) miles per hour, number of passenger : \(currentNumberOfPassengers),
basket : \(hasBasket)"
}
}
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, number of passenger : 2, basket : true
class Train:Vehicle{
override func makeNoise() {
print("Choo Choo")
}
}
let train = Train()
train.makeNoise() //Choo Choo
class Car:Vehicle{
var gear = 1
override var description:String{ //computed property : getter의 역할
return super.description + " in gear \(gear)" //super = 상위 클래스
}
}
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
//Property Observer : 속성값을 지켜보면서 속성값의 변화에 반응
//- willSet : 값이 저장되기 전에 호출되는 Property Observer
//- didSet : 새로운 값이 저장된 후, 바로 호출되는 Property Observer
class AutomaticCar:Car{
override var currentSpeed: Double{
didSet{ //값이 설정이 되면 반응
gear = Int(currentSpeed / 10) + 1
}
}
}
let automatic = AutomaticCar()
automatic.currentSpeed = 30.0
print("AutomaticCar : \(automatic.description)") //AutomaticCar : traveling at 30.0 miles per hour in gear 4