0Pricing
Swift Academy · レッスン

エクステンションでのwhere句

型 エクステンションや プロトコル エクステンションで where を使い、制約を満たす場合のみAPIを追加します(例: Array where Element: Equatable 、 Collection where Element == Int )。

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

制約付き拡張が必要な理由

拡張にwhereを付け、型が制約を満たす場合にのみAPIを追加します。

  • 型の拡張(例: Array)
  • プロトコルの拡張(例: Collection)
  • 完全一致の制約(例: Element == Int)

制約付きの型拡張

ElementがEquatableの場合にのみ、Arrayにメソッドを追加します。Equatableでない配列からは、これらのAPIは見えません。

extension Array where Element: Equatable {
    func removing(_ value: Element) -> [Element] {
        filter { $0 != value }
    }
    func containsAll(_ others: [Element]) -> Bool {
        others.allSatisfy(self.contains)
    }
}
print([1,2,3].removing(2))        // [1,3]
print(["a","b"].containsAll(["b"])) // true

whereを使ったプロトコル拡張

プロトコル拡張は、制約を満たす場合に、適合するすべての型へAPIを追加します(ここではComparableな要素を持つ任意のCollectionが対象です)。

extension Collection where Element: Comparable {
    var isSorted: Bool {
        // Pair each element with the next; ensure non-decreasing order
        zip(self, dropFirst()).allSatisfy(<=)
    }
}
print([1,2,3].isSorted)     // true
print([3,1,2].isSorted)     // false

完全一致の制約

対象を限定したAPIには等価性制約を使用します。たとえばElement == Intの場合にのみ追加できます。ほかの要素型では、これらのAPIは表示されません。

extension Collection where Element == Int {
    var sum: Int { reduce(0, +) }
    func average() -> Double {
        isEmpty ? 0 : Double(sum) / Double(count)
    }
}
print([1,2,3].sum)          // 6
print([1,2,3].average())    // 2.0

機能に基づくAPI

NumericやHashableなどのプロトコルで機能に基づく制約を付け、強力で再利用可能なヘルパーを組み合わせます。

extension Collection where Element: Numeric {
    var total: Element { reduce(0, +) }
}
extension Sequence where Element: Hashable {
    var uniques: [Element] {
        var seen = Set<Element>()
        return filter { seen.insert($0).inserted }
    }
}
print([1,2,2,3].uniques)    // [1,2,3]
print([1,2,3].total)        // 6

設計上の注意点

ヒント:

  • 幅広く再利用できるよう、制約は最小限にしてください。
  • 同じメンバーを定義する拡張が重複しないようにしてください。オーバーロード解決が分かりにくくなる可能性があります。
  • 前提条件(順序、一意性、数値の範囲)をドキュメント化してください。

制約付き拡張の目的

確認問題: 制約付き拡張を使うと何ができますか?

まとめ

まとめ: 型やプロトコルの拡張にwhereを付けると、機能による指定(: Comparable)や正確な型による指定(== Int)によってAPIの対象を正確に絞り込めます。これにより、安全で見つけやすいコードを保てます。

よくある質問

「エクステンションでのwhere句」レッスンは無料ですか?

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

「エクステンションでのwhere句」で何を学びますか?

型 エクステンションや プロトコル エクステンションで where を使い、制約を満たす場合のみAPIを追加します(例: Array where Element: Equatable 、 Collection where Element == Int )。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「エクステンションでのwhere句」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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