🦔

Swift ジェネリクスとはメモざっくり

2024/05/18に公開

・関数や型がさまざまな方に対して動作する場合
・コードの再利用性を高めたい場合
・型の安全性を確保したい場合
にジェネリクスを使用することで、コードの柔軟性と保守性が向上するらしい

2つのジェネリック引数を比較する関数

※Swift標準ライブラリのプロトコルEquatable 型が等しいかどうかを比較するために基本的なインターフェース

protocol Equatable {
    static func == (lhs: Self, rhs: Self) -> Bool
    static func != (lhs: Self, rhs: Self) -> Bool
}
func areEqual<T: Equatable>(_ a: T, _ b: T) -> Bool {
    return a == b
}

let isEqual = areEqual(3, 3)  // true
let isNotEqual = areEqual("Hello", "World")  // false

ジェネリック型"T"
<T>は、ジェネリック型のパラメーターを示している、この関数はTがどんな値であっても動作する。
Tは呼び出し時に具体的な、型(例えば、Intや、String)に置き換えられる。

呼び出し時に、型が変更されているが問題なく動作している。

配列の要素を検索する関数

ジェネリィティクスを使用して、配列内に特定の要素が含まれているかチェックする関数↓

//element→関数がチェックする単一の要素
//arrayはT型の要素を含む配列
func containsElement<T: Equatable>(_ element:T,in array:[T]) -> Bool {
 //array.containsはelementがarrayに含まれているか確認している。
  return array.contains(element)
}

let numbers = [1,2,3,4,5]
let hasThree = containsElement(3, in:numbers)//true
let hasSeven = containsElement(7, in:numbers)//false

2つのジェネリック型を持つペアを作成するクラス

class Pair<A,B> {
   var first: A
   var second: B

   init(first:A, second: B) {
     self.first = first
     self.second = second
   }
}

let pair = Pair(first: 3,second:"Hello")
print(pair.first) //3
pritt(pair.second)//Hello

Pairクラスは、A,Bのジェネリティクス型のパラメーターを受け取る。
Pairクラスは、任意の2つの型をペアとして扱うことができる。

僕的に覚えておきたいこと
<>を使用することでジェネリィティクス型とすることができる
ジェネリティクスを使用することで、異なる型のペアを作れたりする
<T>は関数の呼び出し時に、型が置き換えられる

Discussion