💨
【DAY10】100 Days of SwiftUI -structs, computed properties, and property
はじめに
iOSアプリ界隈で(たぶん)有名なPaul Hudsonさんが無料で公開しているSwiftUIの100日学習コースを進めてみます。学習記録及び備忘録がてらにつらつらと書いてみます。
100 Days of SwiftUI
学んだこと
序盤はSwiftUIは関係なくSwiftという言語の言語仕様のお話。このあたりから少し難しくなってくる。
構造体
一般的な構造体と同じ。
struct Album {
let title: String
let artist: String
let year: Int
func printSummary() {
print("\(title) (\(year)) by \(artist)")
}
}
let red = Album(title: "Red", artist: "Taylor Swift", year: 2012)
let wings = Album(title: "Wings", artist: "BTS", year: 2016)
print(red.title) // 出力: Red
print(wings.artist) // 出力: BTS
red.printSummary() // 出力: Red (2012) by Taylor Swift
wings.printSummary() // 出力: Wings (2016) by BTS
構造体内のデータを書き換えるような処理を入れる場合はmutatingでマークする必要がある。
struct Employee {
let name: String
var vacationRemaining: Int
mutating func takeVacation(days: Int) {
if vacationRemaining > days {
vacationRemaining -= days
print("I'm going on vacation!")
print("Days remaining: \(vacationRemaining)")
} else {
print("Oops! There aren't enough days remainig.")
}
}
}
プロパティオブザーバ
構造体内の変数(プロパティ)の値が変わる際に特定の処理を行う機能をプロパティオブザーバーという。プロパティの変更前に処理を入れる場合はwillSet、変更後に処理を入れる場合はdidSetを用いる。このとき、newValue、oldValueが自動的に生成されそれぞれ変更前の値と変更後の値が格納されている。
struct App {
var contacts = [String]() {
willSet {
print("Current value is: \(contacts)")
print("New value will be: \(newValue)")
}
didSet {
print("There are now \(contacts.count) contacts.")
print("Old value was \(oldValue)")
}
}
}
var app = App()
app.contacts.append("Adrian E")
app.contacts.append("Allen W")
app.contacts.append("Ish S")
// 配列にデータを追加した流れが出力される。
イニシャライザ
一般的な言語と同じ書き方。
struct Player {
let name: String
let number: Int
init(name: String) {
self.name = name
number = Int.random(in: 1...99)
}
}
let player = Player(name: "Megan R")
print(player) // 出力: Player(name: "Megan R", number: 63)
Discussion