0Pricing
Swift Academy · レッスン

初期化子とdeinit(クラス)

指定イニシャライザーとコンビニエンスイニシャライザーを作成し、デフォルト値を設定し、必要に応じてfailable initを使い、クラスのデイニシャライザーを理解します。

「初期化子とdeinit(クラス)」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全3レッスンが含まれています。

概要

このレッスンでは、指定イニシャライザとコンビニエンスイニシャライザ、デフォルト値、失敗可能イニシャライザ、クラスのdeinitについて説明します。

構造体の初期化の基本

構造体にはメンバーごとのイニシャライザが自動的に用意されます。デフォルト値を指定すると、呼び出しを簡潔にできます。

struct User {
    var name: String = "Guest"   // default value
    var age: Int

    // memberwise init is synthesized: User(name:age:)
}
let u1 = User(name: "Ada", age: 20)
let u2 = User(age: 0)            // uses default name
print(u1.name, u2.name)

指定イニシャライザ

指定イニシャライザは、使用する前にすべての格納プロパティが設定されていることを保証します。

class Person {
    let name: String
    let id: Int

    // Designated initializer: fully initializes stored properties
    init(name: String, id: Int) {
        self.name = name
        self.id = id
    }
}
let p = Person(name: "Bob", id: 1)
print(p.name, p.id)

コンビニエンスイニシャライザ

convenienceイニシャライザは、同じクラスの指定イニシャライザに委譲する必要があります。

class Rectangle {
    var width: Double
    var height: Double

    // Designated
    init(width: Double, height: Double) {
        self.width = width
        self.height = height
    }

    // Convenience must call a designated initializer
    convenience init(square side: Double) {
        self.init(width: side, height: side)
    }
}
print(Rectangle(square: 3).width)

失敗可能イニシャライザ

検証に失敗する可能性がある入力にはinit?を使用します。結果はオプショナルになります。

struct Email {
    let value: String
    init?(_ raw: String) {
        guard raw.contains("@") else { return nil } // fail to initialize
        self.value = raw
    }
}
print(Email("a@b.com")?.value ?? "invalid")
print(Email("not email")?.value ?? "invalid")

デイニシャライザ

deinitを持てるのはクラスだけで、インスタンスが解放されると(ARCによって)呼び出されます。

class TempResource {
    let id: Int
    init(id: Int) { self.id = id }
    deinit { print("Releasing resource", id) }
}
do {
    let r = TempResource(id: 42)
    print("Using", r.id)
} // r goes out of scope; ARC may call deinit here

指定とコンビニエンス

確認問題:convenienceイニシャライザは、最終的にどのイニシャライザを呼び出す必要があるでしょうか?

まとめ

まとめ:すべてのプロパティを設定するには指定イニシャライザを使用し、呼び出しやすい形式を提供するにはconvenienceイニシャライザを追加します。検証にはinit?を検討し、クラスの後処理にはdeinitを使用します。

よくある質問

「初期化子とdeinit(クラス)」レッスンは無料ですか?

はい。「初期化子とdeinit(クラス)」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全3レッスンが含まれています。

「初期化子とdeinit(クラス)」で何を学びますか?

指定イニシャライザーとコンビニエンスイニシャライザーを作成し、デフォルト値を設定し、必要に応じてfailable initを使い、クラスのデイニシャライザーを理解します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。

「初期化子とdeinit(クラス)」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

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

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