Swift 언어에서 인스턴스를 초기화하려면 해당 클래스의 모든 필드를 채우고 superconstructor를 호출해야합니다.
class Base {
var name: String
init(name: String) {
self.name = name
}
}
class Derived: Base {
var number: Int
init(name: String, number: Int) {
// won't compile if interchange lines
self.number = number
super.init(name)
}
}
필자의 경우 self
필드에 값을 할당하기 전에 인스턴스 를 만들어야하고 코드 가 할당 후에 만 체인이 연결되는 것처럼 인상 을 주기 때문에 역순으로 보입니다 . 그 외에도 수퍼 클래스는 서브 클래스의 도입 된 속성을 읽을 수있는 법적 수단이 없으므로이 경우 안전은 중요하지 않습니다.
또한 JavaScript와 같은 많은 다른 언어와 Swift의 다소 영적인 조상 인 Objective C조차도 액세스하기 전에 체인 호출을 요구합니다 self
.
슈퍼 컨스트럭터를 호출하기 전에 필드를 정의해야하는이 선택의 이유는 무엇입니까?
self
입니다.