Geniric
- 기능은 같고 매개변수형만 다른 함수
- 자료형을 결정 하지않고 함수를 선언할 수 있다.
보통의 함수 func swapInt(_ a:: inout Int, _ b: inout Int) { let temp = a a = b b = temp }
Generic 함수 func swapAny<T>(_ a:: inout T, _ b: inout T) { let temp = a a = b b = temp }
초기화
designated Initializer
- 모든 프로퍼티를 다 초기화시키는 생성자
주의할 점 : 초기화가 끝나기 전에 다른 메소드 호출이 불가능하다.class Person{ var age : Int var height : Double func display()){ print("나이=\(age)), 키=\(height)") } init(age: Int, height : Double){ self.age = age self.height = height } // designated Initializer var yoo : Person = Person(age:25, height:180.2) yoo.display()
convenience Initializer
- 보조 이니셜라이저
- 일부 프로퍼티만 초기화(단독으로 초기화불가능)
class Person{ var age : Int var height : Double func display()){ print("나이=\(age)), 키=\(height)") } init(age: Int, height : Double){ self.age = age self.height = height } // designated Initializer convenience init(age: Int{ self.init(age: age, height : 179.5) } // convenience Initializer var yoo : Person = Person(age:25, height:180.2) yoo.display() var kim : Person = Person(age:22) kim.display()
failable Initializer
- init 다음에 옵셔널 값이 리턴됨
class Person{ var age : Int var height : Double func display()){ print("나이=\(age)), 키=\(height)") } init?(age: Int, height : Double){ if age <= 0 { return nil } else { self.age = age } self.height = height } // failable Initializer var yoo : Person = Person(age:25, height:180.2) yoo.display() var kim : Person = Person(age:0, height:178.6) kim.display()
required Initializer
- 부모 클래스의 init 메서드
- 자식 클래스에서 반드시 required 키워드로 재작성해야한다.