12일 차: SwiftUI의 100일
9664 단어 swift100daysofcodeswiftui
클래스, 상속 및 체크포인트 7
https://www.hackingwithswift.com/100/swiftui/12
클래스
Classes
는 structs
와 비슷하지만 다르게 동작합니다. 클래스에는 기본 멤버 단위 이니셜라이저가 없으므로 자체적으로 구현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
부터 시작하여 Dog
및 Cat
를 하위 클래스로, Corgi
및 Poodle
를 Dog
및 Persian
및 Lion
의 하위 클래스로 동물에 대한 클래스 계층 구조를 만듭니다. Cat
의 하위 클래스로 .Animal
클래스에는 동물의 다리 수를 추적하는 legs
정수 속성이 있어야 합니다. Dog
클래스에는 일반 개 짖는 문자열을 인쇄하는 speak()
메서드가 있어야 하지만 각 하위 클래스는 약간 다른 것을 인쇄해야 합니다. Cat
클래스에는 일치하는 speak()
메서드가 있어야 하며, 다시 각 하위 클래스는 다른 것을 인쇄합니다. Cat
클래스에는 이니셜라이저를 사용하여 제공되는 isTame
부울 속성이 있어야 합니다. 해결책
Reference
이 문제에 관하여(12일 차: SwiftUI의 100일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/johnkevinlosito/day-12-100-days-of-swiftui-5ao4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)