사람들
학생
학생 운동 선수
축구 선수
import UIKit
struct Grade {
var letter: String
var points: Double
var credits: Double
}
class Person {
var firstName: String
var lastName: String
init(firstName: String, lastName: String){
self.firstName = firstName
self.lastName = lastName
}
func printMyName(){
print("My name is \(firstName) \(lastName)")
}
}
class Student: Person {
var grades: (Grade) = ()
func recordGrade(_ grade: Grade){
grades.append(grade)
}
}
class StudentAthlete: Student {
var minimumTrainingTime: Int = 2
var trainedTime: Int = 0
func train(){
trainedTime += 1
}
}
class FootballPlayer: StudentAthlete {
var footballTeam = "FC Swift"
override func train() {
trainedTime += 2
}
}
자식은 부모의 이니셜라이저를 호출해야 합니다.
-> 슈퍼.초기화
그렇지 않으면 상위 속성에 액세스할 수 없기 때문입니다.
self 앞에 super가 나오면 오류가 발생합니다.
-> 이를 이해하기 위해서는 2단계 초기화에 대한 이해가 필요하다.
2단계 초기화
Swift에는 2단계 초기화라는 규칙이 있습니다.
비정상적인 행동을 방지하기 위한 규칙
(1단계)
– 아래에서 위로 초기화
– 아이들이 먼저 초기화
– 1단계가 끝날 때까지 속성이나 메서드를 사용할 수 없습니다.
– 속성을 설정하기 전에 사용하면 문제가 발생하기 때문에
(2 단계)
– 1단계와 반대 방향으로 진행
– self.init 및 슈퍼.로딩 완료 후속 진행
– self.init 및 super.init가 모두 완료될 때 속성 및 상태 메서드를 사용하는 기능~이 되다
1단계에서 2단계의 작업을 하려고 하면 에러가 납니다.
지정된 이니셜라이저가 필요합니다.
상속의 경우 별도의 init를 생성할 필요가 없습니다.
(부모 이니셜라이저 때문에)
특별한 경우에만 자식에서 초기화를 만듭니다.
Student의 Super.init와 StudentAthlete의 super.init는 다르게 보입니다.
어색한
부모 클래스에서 지정된 초기화를 설정해야 합니다.
-> 필요한