LoginSignup
1
1

More than 5 years have passed since last update.

インスタンスなしでジェネリックタイプにタイプを指定する

Posted at

背景

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)
1
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
1
1