12일 차: SwiftUI의 100일

클래스, 상속 및 체크포인트 7



https://www.hackingwithswift.com/100/swiftui/12

클래스


Classesstructs와 비슷하지만 다르게 동작합니다. 클래스에는 기본 멤버 단위 이니셜라이저가 없으므로 자체적으로 구현init하거나 모든 속성에 기본값을 할당해야 합니다.

class Employee {
    let hours: Int

    init(hours: Int) {
        self.hours = hours
    }

    func printSummary() {
        print("I work \(hours) hours a day.")
    }
}


계승



기존 클래스를 기반으로 클래스를 생성하면 클래스의 모든 속성과 메서드가 상속됩니다. 부모의 메서드/기능도 사용할 수 있습니다override.

class Employee {
    let hours: Int

    init(hours: Int) {
        self.hours = hours
    }

    func printSummary() {
        print("I work \(hours) hours a day.")
    }
}

class Developer: Employee {
    func work() {
        print("I'm writing code for \(hours) hours.")
    }

    override func printSummary() {
        print("I'm a developer who will sometimes work \(hours) hours a day, but other times spend hours arguing about whether code should be indented using tabs or spaces.")
    }
}

let john = Developer(hours: 8)
john.work()
john.printSummary()


클래스를 final 로 표시할 수 있습니다. 즉, 상속을 지원하지 않습니다.

하위 클래스에 이니셜라이저 추가




class Vehicle {
    let isElectric: Bool

    init(isElectric: Bool) {
        self.isElectric = isElectric
    }
}

class Car: Vehicle {
    let isConvertible: Bool

    init(isElectric: Bool, isConvertible: Bool) {
        self.isConvertible = isConvertible
        super.init(isElectric: isElectric)
    }
}

let teslaX = Car(isElectric: true, isConvertible: false)


초기화 해제



Deinitializer는 클래스의 마지막 복사본이 파괴될 때 호출되는 함수입니다.

class UserID {
    let id: Int

    init(id: Int) {
        self.id = id
        print("User \(id): I'm alive!")
    }

    deinit {
        print("User \(id): I'm dead!")
    }
}
var users = [UserID]()

for i in 1...3 {
    let user = UserID(id: i)
    print("User \(user.id): I'm in control!")
    users.append(user)
}

print("Loop is finished!")
users.removeAll()
print("Array is clear!")


체크포인트 7



맨 위에 있는 Animal부터 시작하여 DogCat를 하위 클래스로, CorgiPoodleDogPersianLion의 하위 클래스로 동물에 대한 클래스 계층 구조를 만듭니다. Cat의 하위 클래스로 .
  • Animal 클래스에는 동물의 다리 수를 추적하는 legs 정수 속성이 있어야 합니다.
  • Dog 클래스에는 일반 개 짖는 문자열을 인쇄하는 speak() 메서드가 있어야 하지만 각 하위 클래스는 약간 다른 것을 인쇄해야 합니다.
  • Cat 클래스에는 일치하는 speak() 메서드가 있어야 하며, 다시 각 하위 클래스는 다른 것을 인쇄합니다.
  • Cat 클래스에는 이니셜라이저를 사용하여 제공되는 isTame 부울 속성이 있어야 합니다.

  • 해결책

    좋은 웹페이지 즐겨찾기