모든 수퍼 클래스에서 상속받는 클래스 세트가 있습니다. 이 슈퍼 클래스는 모든 서브 클래스에 적합 할 정도로 충분히 일반적인 초기화자를 제공합니다. 특히이 포함자동 이니셜 라이저 상속 규칙 둘러보기 Swift
init(values: [String: Any]) {
updateValues(dict: values)
}
및
func updateValues(dict: [String: Any]){
//To be implemented in subclasses
}
를 서브 클래스에서 updateValues()
를 무시함으로써 각각의 서브 클래스가 제대로 자신의 변수를 설정, 모든 것이 작동하는 것 같다 수 있도록 동적 파견을 이용하여.
var name: String?
var uid: String?
var email: String?
var username: String?
과 같이 그 updateValues()
보인다 :
는 예를 들어, 사용자 클래스, 속성과 같이 선언
override func updateValues(dict: [String: Any]) {
self.name = dict["name"] as? String
self.uid = dict["uid"] as? String
self.email = dict["email"] as? String
self.username = dict["username"] as? String
}
이 완벽하게 작동합니다. 하지만 변수를 수동으로 설정해야하는 경우에는 사전과 달리 하위 클래스에 사용자 지정 지정된 이니셜 라이저를 추가해야합니다. 예를 들어, 상기 언급 된 사용자 클래스에 대한 하나 개의 예는 초기화 될 것이다 :
init(name: String?, uid: String?, email: String?, username: String?){...
이 아직 초기화 선언은 바람직하지 않은 결과를 생성한다. 페이지의 Swift "Automatic Initializer Inheritance"규칙에 따라 하나의 지정된 초기화 프로그램이 서브 클래스에 제공되면 더 이상 슈퍼 클래스의 초기화 프로그램을 상속하지 않습니다. 이렇게하면 상속을 지루하게 만듭니다. 자동 상속을 원하는 이니셜 라이저를 재정의해야하며 모든 하위 클래스에
super.init()
을 호출하면됩니다. 이
override init
-
super.init()
해결 방법의 모든 인스턴스에 대한 설명도 다시 써야합니다.
슈퍼 클래스 지정 초기화 프로그램을 계속 상속 받습니까? 아니면 내가 잘못 생각하나요?
참고 : 서브 클래스의 지정된 초기화 프로그램을 주석 처리했으며 수퍼 클래스 초기화 프로그램이 자동으로 상속되었습니다. 추가 서브 클래스 이니셜 라이저를 추가하거나 기능의 주석을 제거하여 기능을 변경하지 않아도되므로 신속한 적용을 위해 안전 체크를 해결하는 방법을 찾고 싶습니다.