0Pricing
Swift Academy · レッスン

構造体とクラス、プロパティ、初期化子

値セマンティクスと参照セマンティクスを比較し、格納プロパティと計算プロパティ、プロパティオブザーバー、初期化子、クラスの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 run

Structと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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 構造体とクラス、プロパティ、初期化子
  2. 格納プロパティと計算プロパティ、オブザーバー
  3. 初期化子とdeinit(クラス)
← Swift Academyに戻る