Initializer Delegation

작성일

Initializer Delegation

  • 값형식은 상속이 불가능하다

값형식(Struct)

struct Size {
  var width: Double
  var height: Double

  init(w: Dobule, h: Dobule) {
    width = w
    height = h
  }

  init(value: Double) {
      self.init(w: value, h: value)
  }
}

2속성을 모두 초기화 하고 있다. 두번째 init이 첫번쨰 init에게 위임을 하고있다. 이게 바로 Delegation이다.
이러면 첫번째 init만 바꿔주면 되서 유지보수가 편해진다.

참조형식(class)

class Figure {
  let name: String

  init(name: String) {
    self.name = name
  }

  convenience init() {
    self.init(name: "unknown")
  }
}

class Rectangle: Figure {
  var width = 0.0
  var height = 0.0

  init(n: String, w:Double, h: DOuble){
    weidth = w
    height = h
    super.init(name: n)
  }

  convenience init(value: Double) {
    self. init(n: "rect", w: value, h: value)
  }
}

class square: Rectangle {
  convenience init(value: Double) {
    self.init(m: "square", w: value, h: value)
  }

  convenience init() {
    self.init(value: 0.0)
  }
}

이렇게 상위 클래스에 위임을 하며 클래스를 상속하면, 유지보수하기가 더 편해진다.