構造体とクラス、プロパティ、初期化子
値セマンティクスと参照セマンティクスを比較し、格納プロパティと計算プロパティ、プロパティオブザーバー、初期化子、クラスのdeinitを使います。
「構造体とクラス、プロパティ、初期化子」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全3レッスンが含まれています。
概要
Swiftには主に2種類の複合型があります。structは値型、classは参照型です。
- Structは代入時にコピーされます
- Classは参照を共有します
値型と参照型
Structは値をコピーし、classは参照を共有します。bを変更してもaには影響しませんが、dを変更するとcに影響します。
struct Point { var x = 0, y = 0 }
class CPoint { var x = 0, y = 0 }
var a = Point(x: 1, y: 1)
var b = a // copy
b.x = 9
print("struct a.x =", a.x, "b.x =", b.x) // 1, 9
let c = CPoint(); c.x = 1
let d = c // same reference
d.x = 9
print("class c.x =", c.x, "d.x =", d.x) // 9, 9プロパティ
格納プロパティはデータを保持し、計算プロパティはアクセス時に値を算出します。
struct Rectangle {
var width: Double // stored
var height: Double // stored
var area: Double { // computed
return width * height
}
}
let r = Rectangle(width: 3, height: 4)
print(r.area) // 12オブザーバー
格納プロパティの変更を監視するには、willSet/didSetを使用します。
struct Counter {
var value: Int = 0 {
willSet { print("will set to", newValue) }
didSet { print("did set from", oldValue) }
}
}
var cnt = Counter()
cnt.value = 5イニシャライザ
Structにはメンバーごとのイニシャライザが自動的に用意されます。Classではinit(指定イニシャライザ)を定義し、convenienceイニシャライザを追加できます。
struct User {
var name: String
// memberwise init is synthesized: User(name:)
}
class Person {
var name: String
init(name: String) { // designated
self.name = name
}
convenience init() { // convenience
self.init(name: "Guest")
}
}
let u = User(name: "Ada")
let p = Person()
print(u.name, p.name)deinit
deinitを持てるのはclassだけです。インスタンスが解放されると(ARCによって)呼び出されます。
class Temp {
let id: Int
init(id: Int) { self.id = id }
deinit { print("Temp \\(id) deinit") }
}
do {
let t = Temp(id: 1)
print("using", t.id)
} // t goes out of scope and deinit may runStructとClassの確認
クイックチェック: StructとClassの違いを正しく説明している文はどれですか?
振り返り
振り返り: 単純なデータ(値セマンティクス)にはstructを優先します。共有アイデンティティ、継承、deinitが必要な場合はclassを使用します。格納プロパティ、計算プロパティ、オブザーバー、適切なイニシャライザを追加します。
よくある質問
「構造体とクラス、プロパティ、初期化子」レッスンは無料ですか?
はい。「構造体とクラス、プロパティ、初期化子」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全3レッスンが含まれています。
「構造体とクラス、プロパティ、初期化子」で何を学びますか?
値セマンティクスと参照セマンティクスを比較し、格納プロパティと計算プロパティ、プロパティオブザーバー、初期化子、クラスのdeinitを使います。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。
「構造体とクラス、プロパティ、初期化子」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 構造体とクラス、プロパティ、初期化子
- 格納プロパティと計算プロパティ、オブザーバー
- 初期化子とdeinit(クラス)