✨
【DAY12】100 Days of SwiftUI -classes, inheritance
はじめに
iOSアプリ界隈で(たぶん)有名なPaul Hudsonさんが無料で公開しているSwiftUIの100日学習コースを進めてみます。学習記録及び備忘録がてらにつらつらと書いてみます。
100 Days of SwiftUI
学んだこと
序盤はSwiftUIは関係なくSwiftという言語の言語仕様のお話。
クラスの定義
一般的なクラスと同じ。
class Game {
var score = 0 {
didSet {
print("Score is now \(score)")
}
}
}
var newGame = Game()
newGame.score += 10 // 出力: Score is now 10
継承とオーバーライド
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 sould be indented using tabs or spaces. ")
}
}
class Manager: Employee {
func work() {
print("I'm going to meetings for \(hours) hours.")
}
}
let robert = Developer(hours: 8)
let joseph = Manager(hours: 10)
robert.work()
joseph.work()
robert.printSummary()
super
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
initializerの逆でオブジェクトが破棄されたときに呼び出される。例えばループ内で宣言されたインスタンスはループを外れた時点で破棄されてdeinitializerが呼び出される。
class User {
let id: Int
init(id: Int) {
self.id = id
print("User \(id): I'm alive!")
}
deinit {
print("User \(id): I'm dead!")
}
}
for i in 1...3 {
let user = User(id: i)
print("User \(user.id): I'm in control!")
}
// 出力
// User 1: I'm alive!
// User 1: I'm in control!
// User 1: I'm dead!
// User 2: I'm alive!
// User 2: I'm in control!
// User 2: I'm dead!
// User 3: I'm alive!
// User 3: I'm in control!
// User 3: I'm dead!
Discussion