0Pricing
Swift Academy · レッスン

条件付き適合

where句を使い、ジェネリック型を条件付きでプロトコルに適合させます。

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

ようこそ

条件付き適合を使うと、ジェネリック型は型パラメーターが特定の制約を満たす場合にのみプロトコルに適合できます。これはSwiftの型システムの表現力を支える中核機能です。

基本的な条件付き適合

```swift extension Array: Equatable where Element: Equatable { // Array is Equatable only when Element is Equatable } let a = [1,2,3] let b = [1,2,3] print(a == b) // true — works because Int is Equatable ```

カスタムジェネリック型

```swift struct Box { var value: T } extension Box: Equatable where T: Equatable { static func == (lhs: Box, rhs: Box) -> Bool { lhs.value == rhs.value } } print(Box(value: 42) == Box(value: 42)) // true ```

条件付きHashable適合

```swift extension Box: Hashable where T: Hashable { func hash(into hasher: inout Hasher) { hasher.combine(value) } } // Box is Hashable; Box is not ```

条件付きCodable適合

```swift extension Box: Codable where T: Codable {} let box = Box(value: "hello") let data = try JSONEncoder().encode(box) // works — String is Codable ```

extensionでのwhere句

```swift extension Collection where Element == Int { var sum: Int { reduce(0, +) } } print([1,2,3,4].sum) // 10 // This extension only applies to collections of Int ```

複数の制約

```swift extension Dictionary where Key: Comparable, Value: Equatable { func sortedByKey() -> [(Key, Value)] { sorted { $0.key < $1.key } } } ```

プロトコルの条件付き適合

```swift protocol Printable { func prettyPrint() } extension Optional: Printable where Wrapped: Printable { func prettyPrint() { switch self { case .none: print("nil") case .some(let v): v.prettyPrint() } } } ```

条件付き適合の使用

```swift let opt: Int? = 42 // If Int conformed to Printable: // opt.prettyPrint() // "42" // Standard usage: let nums = Optional([1,2,3]) // [1,2,3]? if let arr = nums, arr == [1,2,3] { ... } // Equatable via conditional ```

遡及的適合に関する警告

Swift 5.7以降では、遡及的適合(別のモジュールの型に適合を追加すること)について警告が表示されます: ```swift extension String: SomeThirdPartyProtocol {} // ⚠️ retroactive ``` 意図的な場合は、`@retroactive` を付けて明示してください。

確認問題

条件付き適合の extension で条件を導入するキーワードは何ですか?

まとめ

主なポイント: • `extension T: Protocol where Param: Constraint` — 条件付き適合 • Array、Optional、Result などは、Equatable、Hashable、Codable にこの仕組みを使用します • カスタムのジェネリック型でも同じことができます • `where Element == Int` は、特定の具体型に制約します • Swift 5.7以降では、遡及的適合に `@retroactive` が必要です 次は `Self` の要件です。

よくある質問

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

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

「条件付き適合」で何を学びますか?

where句を使い、ジェネリック型を条件付きでプロトコルに適合させます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

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

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

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

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

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

  1. &によるプロトコル合成
  2. 条件付き適合
  3. Self要件とEquatableの設計
  4. プロトコル指向設計の原則
← Swift Academyに戻る