(신속한) 클래스 이니셜라이저

사람들

학생

학생 운동 선수

축구 선수

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는 다르게 보입니다.

어색한

부모 클래스에서 지정된 초기화를 설정해야 합니다.

-> 필요한