2019년 1월 8일 화요일

Instance Methods

  

class Counter {
   var count = 0
   func increment() {
       count += 1
   }
   func increment(by amount: Int) {
       count += amount
   }
   func reset() {
       count = 0
   }
}

let counter = Counter()
counter.increment()
counter.increment(by: 5)
counter.reset()

// The self Property

struct Point {
   var x = 0.0, y = 0.0
   func isToTheRightOf(x: Double) -> Bool {
       return self.x > x
   }
}
let somePoint = Point(x: 4.0, y: 5.0)
if somePoint.isToTheRightOf(x: 1.0) {
   print("This point is to the right of the line where x == 1.0")
}

// Modifying Value Types from Within Instance Methods

struct Point {
   var x = 0.0, y = 0.0
   mutating func moveBy(x deltaX: Double, y deltaY: Double) {
       x += deltaX
       y += deltaY
   }
}

var somePoint = Point(x: 1.0, y: 1.0)
somePoint.moveBy(x: 2.0, y: 3.0)
print("The point is now at (\(somePoint.x), \(somePoint.y))")

// Assining to self Within a Mutating Method

struct Point {
   var x = 0.0, y = 0.0
   mutating func moveBy(x deltaX: Double, y deltaY: Double) {
       self = Point(x: x + deltaX, y: y + deltaY)
   }
}

enum TriStateSwitch {
   case off, low, high
   mutating func next() {
       switch self {
       case .off:
           self = .low
       case .low:
           self = .high
       case .high:
           self = .off
       }
   }
}

var ovenLight = TriStateSwitch.low
ovenLight.next()
ovenLight.next()