は、実際には、サブクラス "SomeViewControllerClass" を返すんので自己のみを返品することはできますか?
let s = SomeViewControllerClass.make(...)
正常に動作しますthis pattern
extension UIViewController
{
class func make(sb: String, id: String) -> Self
{
return helper(sb:sb, id:id)
}
private class func helper<T>(sb: String,id: String) -> T
{
let s = UIStoryboard(name: storyboardName, bundle: nil)
let c = s.instantiateViewControllerWithIdentifier(id) as! T
return c
}
}
を、考えてみましょう。 (だけでなく、のUIViewController)
すべての罰金ですしかし、
がmake
に言うあなたは、いくつかのセットアップをしたい:実際には
class func make(sb: String, id: String) -> Self
{
let h = helper(sb:sb, id:id)
// some setup, m.view = blah etc
return h
}
あなたがことはできません表示されます。
あなただけ
return helper(sb:sb, id:id)
あなたは
let h = helper(sb:sb, id:id)
return h
することはできません解決策はありますか?
これは、参照パターンの「トリック」です。 'returnヘルパー(sb:sb、id:id)'では、ジェネリックプレースホルダ型 'T'が' Self'から推論されます。 - 追加設定をいつでもヘルパーメソッドに移動できます。 –
あるいは、http://stackoverflow.com/q/37240091/2976878に示されているように、 'helper'に' T.Type'パラメータを追加してください。そのパラメータに 'self'を渡すだけで' T'は 'Self'と推論されます。 – Hamish
私はあなたが何を意味するのか見ています@マーティンR、ありがとう... – Fattie