Swift 3, o ".self" em um problema de metatipo está realmente correto?
Eu tenho uma extensão para subir a cadeia de controladores de exibição (mesmo através de exibições de contêiner, o que é muito útil)
public extension UIViewController // go up to a certain class
{
public func above<T>(_ : T.Type)->(T)
{
var p:UIResponder = self
repeat { p = p.next! } while !(p is T)
return p as! T
}
}
(Além disso, NB, Swift3 precisa do "!" Na p. Seguinte: infelizmente não sei exatamente por que.)
Então, digamos que você tenha uma classe de controlador de exibição "Geral", você pode
self.above(General).clickedHamburgerMenuButton()
e ele encontrará o primeiro "Geral" acima de você. Tudo bem, mas com o Swift 3 você recebe este aviso .......
Falta '.self' para referência ao metatipo do tipo 'General'
Parece querer isso
self.above(General.self).clickedHamburgerMenuButton()
1) Parece ... perigoso ... mudarGeneral
paraGeneral.self
- de fato, é seguro e é osignificando o mesmo ComoGeneral
em Swift <3?
2) na extensão
public func above<T>(_ : T.Type)->(T)
por que isso é um metatipo? Fiz algo de errado"e solicite um metatipo ao invés de apenas um tipo?
2) O que diabos é um "metatipo"? (Na verdade, não posso encontrá-lo explicado como tal em nenhum lugar.) Ou seja, o que "geral" pode significar lá além de "a própria classe". (Não é uma instância, estática ou qualquer outra coisa ...)