ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 확장에서의 생성자 사용
    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
Designed by Tistory.