[Swift] ジェネリックス(Generics)のサンプル

objective-cで何で使えないんだよ、、、と常々思っていたGenericsもSwiftではもちろん使えます。
最近の開発言語では当たり前の機能ですね。

 

ジェネリックスな関数のサンプル

// 引数で与えられた要素を持ったSwift配列を返す
func toArray<T>(values:T...) -> Array<T> {
    var result = Array<T>()
    for v in values {
        result += v
    }
    return result
}


// こんなふうに呼び出すことが可能
// うーん、ジェネリックス!
let intArray = toArray(1,2,3,4,5,6,7)
let stringArray = toArray("A","B","C")

 
 

ジェネリックスなクラスのサンプル

// IntをキーとしたDictionaryを生成するBuilderクラス
// appendで要素を追加してbuildで作成
class IndexedDictionaryBuilder<T> {
    
    var array = Array<T>()
    
    func append(elm:T){
        array.append(elm)
    }
    
    func build() -> Dictionary<Int,T> {
        var result = Dictionary<Int,T>()
        for (index,elm) in enumerate(array) {
            result[index] = elm
        }
        return result
    }
}


// 使い方
// コンストラクタで型を指定
let builder = IndexedDictionaryBuilder<String>()
builder.append("アガシジィ")
builder.append("ビタエニアータ")
builder.append("エリザベサエ")

// buildするとコンストラクタで指定した型を値に持ったdictionaryを生成する    
let dict:Dictionary<Int,String> = builder.build()
for (key,value) in dict {
    NSLog("第\(key)位 \(value)")
}
// 第1位 アガシジィ
// 第2位 ビタエニアータ
// 第3位 エリザベサエ

 
構文も素直で使いやすいですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です