Рассмотрим this patternМожет только возвращаться, а не назначать, Self?
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
}
}
работает отлично, поэтому
let s = SomeViewControllerClass.make(...)
это на самом деле возвращает подкласс "SomeViewControllerClass". (. Это не просто 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 helper (sb: sb, id: id)' общий тип заполнителя 'T' выводится из' Self'. - Вы всегда можете переместить дополнительную настройку в вспомогательный метод. –
Или добавьте параметр 'T.Type' в' helper', например, в http://stackoverflow.com/q/37240091/2976878. Затем просто перейдите в 'self' для этого параметра, и' T' будет выведено как 'Self'. – Hamish
Я понимаю, что вы имеете в виду @MartinR, спасибо ... – Fattie