0Pricing
Swift Academy · レッスン

Self要件とEquatableの設計

Selfを使用するプロトコルと、Equatable/Comparableがそれを活用する仕組みを学びます。

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

ようこそ

プロトコル内の `Self` は、適合する具体型を指します。これにより、`Equatable` や `Comparable` などのプロトコルを、異なる型が混在する場合でも安全に機能させられます。

パラメーター型としての Self

```swift protocol Equatable { static func == (lhs: Self, rhs: Self) -> Bool } ``` `Self` は、両方のパラメーターが同じ具体型でなければならないことを意味します。このプロトコルを通して `Int` と `String` を比較することはできません。

Equatable への適合

```swift struct Point: Equatable { var x: Double var y: Double // Auto-synthesised: // static func == (lhs: Point, rhs: Point) -> Bool // { lhs.x == rhs.x && lhs.y == rhs.y } } print(Point(x:1,y:2) == Point(x:1,y:2)) // true ```

Self を使った Comparable

```swift struct Version: Comparable { let major, minor, patch: Int static func < (lhs: Version, rhs: Version) -> Bool { (lhs.major, lhs.minor, lhs.patch) < (rhs.major, rhs.minor, rhs.patch) } } let v1 = Version(major:1,minor:2,patch:0) let v2 = Version(major:2,minor:0,patch:0) print(v1 < v2) // true ```

戻り値の型としての Self

```swift protocol Clonable { func clone() -> Self } class Animal: Clonable { var name: String = "" required init() {} func clone() -> Self { type(of: self).init() } } ``` 戻り値の型に `Self` を指定すると、サブクラスは `Animal` ではなく、それぞれの型を返します。

Self 要件を持つプロトコル(PAT)

```swift protocol Scalable { func scaled(by factor: Double) -> Self } struct Size: Scalable { var w, h: Double func scaled(by f: Double) -> Size { Size(w: w*f, h: h*f) } } ```

Hashable: Self + Equatable

```swift struct Color: Hashable { var r, g, b: UInt8 // Auto-synthesised: func hash(into:) and == } var palette: Set = [] palette.insert(Color(r:255,g:0,b:0)) ``` `Hashable` には `Equatable` が必要です。単純な構造体では、どちらも自動的に合成されます。

Self 要件を持つプロトコルは存在型として直接使用できない

```swift // Before Swift 5.7: var shapes: [Equatable] = [] // ❌ Equatable has Self requirement // After Swift 5.7 with 'any': var boxes: [any Equatable] = [] // ⚠️ limited API ``` `any` キーワードを使うと、存在型ボックス化を明示的に選択できます。

自動合成の前提条件

`Equatable`、`Hashable`、`Comparable` の自動合成には、次の条件が必要です: • すべての格納プロパティが同じプロトコルに適合している • 列挙型のケース(関連値を含む)が適合している ```swift struct Pair: Equatable { var a, b: T } // Equatable synthesised automatically ```

Equatable のカスタム実装

```swift struct Person: Equatable { var id: UUID var name: String // Only compare by id, ignore name: static func == (lhs: Person, rhs: Person) -> Bool { lhs.id == rhs.id } } ```

確認問題

プロトコル内の `Self` は何を指しますか?

まとめ

主なポイント: • `Self` = 適合する具体型 • `Equatable`、`Comparable`、`Hashable` はすべて `Self` を使用します • Swift は単純な構造体と列挙型に対して、これらを自動的に合成します • 戻り値の型に `Self` を使うと、型を維持する API になります • `Self` 要件を持つプロトコルを存在型として使うには、`any` が必要です(Swift 5.7以降) 次は、プロトコル指向設計の原則です。

よくある質問

「Self要件とEquatableの設計」レッスンは無料ですか?

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

「Self要件とEquatableの設計」で何を学びますか?

Selfを使用するプロトコルと、Equatable/Comparableがそれを活用する仕組みを学びます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Self要件とEquatableの設計」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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