背景
func foo<T>(objects: [T])->T? {
return objects.first
}
Swiftではメソッド宣言に、上記のようなジェネリックタイプをサポートしますが、ジェネリックタイプを明示的に指定することができません:
foo([Int]()) // タイプの **インスタンス** でタイプを推測させることができる
foo<Int>([]) // タイプをこういう風に指定するのは文法エラー
問題
このタイプのインスタンスを作りたくない、作れないケースがあります。
こういう場合、タイプ自体でジェネリックを呼び出す方法は?
コード
// 定義
func findObjectByType<T>(objs: [AnyObject], t: T.Type)->T? {
for obj in objs {
if let casted = obj as? T {
return casted
}
}
return nil
}
// 使用
findObject(findObjectByType, Class1.self)