class StepCounter {
var totalSteps: Int = 0 {
willSet(newState) {
print("totalSteps: \\(newState)")
}
didSet(oldState) {
print("\\(totalSteps - oldState) step")
}
}
}
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
// willSet이 동작 새로운 값 newValue = 200 (출력:totalSteps: 200)
// didSet이 동작 기존 값 oldValue = 0 (출력: (200 - 0) step)
class Robot {
enum State {
case stopped, movingForward, turningRight, turningLeft
}
var state = State.stopped
}
class ObservableRobot: Robot {
override var state: State {
willSet(newState) {
print("Transitioning from \\(state) to \\(newState)")
}
}
}
var robot = ObservableRobot()
robot.state = .movingForward // 출력: Transitioning from stopped to movingForward
class GPSTrackViewController: UIViewController {
var track: GPSTrack = GPSTrack()
lazy var preview: UIImage = {
for point in track.record {
// 어떤 비용이 많이 드는 계산 수행.
}
return UIImage(/* ... */)
}()
}
struct Point {
var x: Double
var y: Double
private(set) lazy var distanceFromOrigin: Double = (x*x + y*y).squareRoot()
init(x: Double, y: Double) {
self.x = x
self.y = y
}
}
var point = Point(x: 3, y: 4)
point.distanceFromOrigin // 5.0
point.x += 10
point.distanceFromOrigin // 5.0
let immutablePoint = Point(x: 3, y: 4)
immutablePoint.distanceFromOrigin