-
확장에서의 생성자 사용Swift/swift 문법 2023. 3. 29. 00:22
클래스 - 편의생성자만 구현 가능하다.
(self.키워드로 생성자 지정)
델리게이트 어크로스 : 편의생성자는 궁극적으로 지정생성자를 호출해야한다
// 참고 : 상속에서의 생성자 위임 규칙 1) 델리게이트 업 : 지정생성자는 슈퍼클래스의 지정생성자를 반드시 호출해야한다 2) 델리게이트 어크로스 : 편의생성자는 궁극적으로 지정생성자호출해야한다
구조체 - 지정생성자 형태로도 구현 가능하다.(자유)
import Foundation class Aclass { var x: Int var y: Int init(x: Int, y: Int) { self.x = x self.y = y } convenience init() { self.init(x: 0, y: 0) } } class Bclass: Aclass { var z: Int init(z:Int){ self.z = z super.init(x: x, y: y) } override convenience init(x: Int, y: Int) { //편의 이니셜라이저는 값을 할당하기 전에 다른 이니셜라이저를 호출해야함 self.init() self.z = 0 } } class Cclass: Aclass { var z : Int //지정생성자 init(x: Int, y: Int, z: Int) { self.z = z super.init(x: x, y: y) } //생성자 재정의 override convenience init(x: Int, y: Int) { //지정생성자 호출 -> 편의생성자 self.init(x: 0, y: 0, z: 0) } } extension Cclass { convenience init(x: Int) { //확장에서는 self키워드로 자신의 init을 가져와서 써야한다.(클래스) self.init(x: x, y: 0) } }
'Swift > swift 문법' 카테고리의 다른 글
hashable 프로토콜 (0) 2023.04.09 프로토콜 - Equatable, Comparable (0) 2023.04.03 제네릭 (0) 2023.03.27 에러 처리 (0) 2023.03.27 Result Type (0) 2023.03.27