0Pricing
Swift Academy · レッスン

条件付き準拠

型パラメーターが制約を満たす 場合のみ ジェネリック型をプロトコルに準拠させます(例: Box<T>: Equatable where T: Equatable )。

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

条件付き適合とはなぜ必要か

条件付き適合は、型パラメータが制約を満たす場合にのみプロトコル適合を追加します。これによりAPIを正確に保ち、定型コードを避けながら、標準ライブラリと強力に組み合わせられます。

ジェネリック型の基本

まずジェネリック型を作成します。追加の実装をしなければ、Tが適合していてもBoxはEquatable/Hashableに適合しません。

struct Box<T> {
    var value: T
}
let bi = Box(value: 3)
let bs = Box(value: "hi")
// At this point Box has no Equatable/Hashable, regardless of T.

条件付きのEquatable

T: Equatableの場合にのみEquatableを追加します。Equatableでない型のボックスを比較するコードはコンパイルできません(安全性が高まります)。

extension Box: Equatable where T: Equatable {
    static func == (lhs: Box<T>, rhs: Box<T>) -> Bool {
        lhs.value == rhs.value
    }
}
print(Box(value: 5) == Box(value: 5))   // true
// Works because Int is Equatable
// print(Box(value: someNonEquatable) == ...) // won't compile

条件付きのHashable

同様に、要素がHashableの場合にのみHashableを採用します。これによりSet/DictionaryでBox<T>を使用できます。

extension Box: Hashable where T: Hashable {
    func hash(into hasher: inout Hasher) {
        hasher.combine(value)
    }
}
let set: Set<Box<Int>> = [Box(value: 1), Box(value: 1)]
print(set.count)  // 1 because Hashable is available only when T: Hashable

whereによる機能の条件付け

extension ... whereを使用すると、特定の機能(例: T: Numeric)に対してのみメソッドを公開でき、基本APIを小さく保てます。

// Add extra APIs only when T supports them
extension Box where T: Numeric {
    func doubled() -> T { value + value }
}
print(Box(value: 7).doubled())     // 14 (Int is Numeric)
// Box(value: "hi").doubled()      // won't compile — String not Numeric

標準ライブラリでの使用例

これはすでに日常的に使用しています。

  • Array: EquatableはElement: Equatableの場合にのみ使用できます。
  • Dictionary/Setのハッシュ化は、キーや要素がHashableの場合にのみ使用できます。
  • Optionalの等価性はWrapped: Equatableの場合にのみ使用できます。

利点: APIが正確になり、コンパイル時の安全性が得られます。

定義の確認

確認問題: 条件付き適合によって何が可能になりますか?

まとめ

まとめ: extension Type: Protocol where ...を使用して、制約を満たす場合にのみ適合とAPIを追加します。これにより、コードを正確で安全に保ち、動作を理解しやすくできます。

よくある質問

「条件付き準拠」レッスンは無料ですか?

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

「条件付き準拠」で何を学びますか?

型パラメーターが制約を満たす 場合のみ ジェネリック型をプロトコルに準拠させます(例: Box<T>: Equatable where T: Equatable )。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「条件付き準拠」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. 条件付き準拠
  2. 再帰的制約と高階ジェネリック
  3. エクステンションでのwhere句
← Swift Academyに戻る