0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ジェネリクス関数とジェネリクスプロトコル

Last updated at Posted at 2021-04-26

ジェネリクス関数

通常の関数は、引数の型を決めたり、返り値の型を決めなければいけません。
しかし、ジェネリクト関数では、Int型でもString型でもどんな型でも対応してくれることができます。

書き方はこんな感じ。

//ジェネリクスを指定
func sample<T>(x:T, y:T) -> T {
    return x + y
}

ジェネリクス関数を使用したい時は、関数名の後ろにをつけます。Tじゃなくても良いんですが、一般的にはT。

これだと関数内で演算が行われることになるので、その場合は数値でないといけなくなります。
その場合は下記のように「関数名<T: Numeric」と指定することで、数値型要素を持つ関数であることを宣言します。

//ジェネリクスを指定
func sample<T:Numeric>(x:T,y:T) -> T {
    return x + y
}

こうすることで、Int, Double, Floatなど数値型であればどの型にも対応することが可能になります。

ジェネリクスプロトコル

プロトコルにジェネリクスを使用することで、Int型とString型のクラスを定義したりすることができます。

//プロトコルの定義
protocol FruitsProtocol {
    associatedtype T
    var item:T { get }     
    func fruitvalue(item:T) 
}


//クラス(Int型)
class Fruits1:FruitsProtocol {

    var item:Int = 100
    
    func fruitvalue(item: Int) {
        self.item += 100
    }
}

//クラス(String型)
class Fruits2:FruitsProtocol {

    var item:String = "100"
    
    func fruitvalue(item: String) {
        self.item = item + "円です"
    }
}

プロトコルでジェネリクスを使用する時は、
associatedtype T
のように任意の型を指定します。

参考

[増補改訂第3版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 (WEB+DB PRESS plusシリーズ) 

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?