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

questionAnswers(1)

yourAnswerToTheQuestion