KWiOS
KWiOS0101
KWiOS
  • 분류 전체보기 (108)
    • Algorithm (41)
      • 이코테 (14)
      • 이코테 문제풀이 (21)
      • 프로그래머스 (6)
    • CS (1)
      • 모두를 위한 컴퓨터 과학(CS50 2019) (0)
    • iOS (15)
    • Swift (36)
      • Swift문법 (32)
      • 기타 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 6

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
KWiOS

KWiOS0101

Swift/Swift문법

Swift문법 - 이니셜라이저 델리게이션

2023. 5. 21. 23:01

이니셜라이저 델리게이션

이니셜라이저 안에 다른 이니셜라이저를 호출하는 것

초기화 코드에서 중복을 최대한 제거하고 모든 속성을 효율적으로 초기화 하기 위해서 사용한다.

값형식과 참조형식에서 서로 다른 규칙으로 구현된다.

값형식은 상속 불가 이니셜라이저 하나기때문에 상대적으로 단순함

값 형식 
커스텀 이니셜라이저 안에서 self.init으로 다른이니셜라이저 호출가능
```swift
struct Test {
    var first: String
    var second: String
    
    init(value1: String, value2: String) {
        first = value1
        second = value2
    }
    
    init(value: String) {
        self.init(value1: value, value2: value)
    }
}

```

class
상속 계층을 따라 올라가면서 모든 이니셜라이저가 올바른 순서로 호출되도록 구현하는것이 중요

```swift
class First {
    var first: String
    
    init(name: String) {
        first = name
    }
}

class Second: First {
    var second = 0
    var three = 0
    
    init(n: String, value1: Int, value2: Int) {
        second = value1
        three = value2
        super.init(name: n) // 델리게이트 업 1번 규칙
    }
    
    convenience init(value: Int) {
        self.init(n:"hello", value1: value, value2: value) // 델리게이트 어크로스
    }
}

// 델리게이트 어크로스
class Three: Second {
    
    // 속성이 선언되어있지 않음
    // 이 경우에는 세컨드 클래스의 지정생성자가 상속됨
    
    
    // 상속받은 세컨드 클래스의 지정생성자를 호출하기때문에 self를 사용
    // 컨비니언스는 델리게이션 업 불가능함
    convenience init(value: Int) {
        self.init(n:"Swift", value1: value, value2: value)
    }
    //
    convenience init() {
        self.init(value: 10)
    }
}

var test = Three(value: 20)

test.first
test.second
test.three
```

참조 형식

<Swift가 정한 3가지 규칙 - 무조건 해야 함. 필수>

지정 이니셜라이저 안에서, 바로 위 슈퍼클래스의 지정 이니셜라이저를 호출 - 델리게이트 업

편의 이니셜라이저 안에서, 같은 클래스 내의 지정 이니셜라이저를 호출 - 델리게이트 어크로스

편의 이니셜라이저 안에서, 마지막에는 지정 이니셜라이저를 호출 


'Swift > Swift문법' 카테고리의 다른 글

Swift문법 - required initializers  (0) 2023.05.14
Swift문법 - Class Initializer  (0) 2023.05.07
Swift문법 - Memberwise Initialer  (0) 2023.04.30
Swift문법 - Inheritance  (1) 2023.04.23
Swift문법 - Method  (0) 2023.04.16
    'Swift/Swift문법' 카테고리의 다른 글
    • Swift문법 - required initializers
    • Swift문법 - Class Initializer
    • Swift문법 - Memberwise Initialer
    • Swift문법 - Inheritance
    KWiOS
    KWiOS

    티스토리툴바