Swift 3, ¿es correcto el ".self" en una cuestión de metatipo?

Tengo una extensión para subir por la cadena del controlador de vista (incluso a través de vistas de contenedor, lo cual es muy ú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
        }
    }

(Aparte, NB, Swift3 necesita el "!" En p.siguiente: desafortunadamente no estoy seguro exactamente por qué).

Entonces, digamos que tiene una clase de controlador de vista "General", puede

self.above(General).clickedHamburgerMenuButton()

y encontrará el primer "General" sobre ti. Todo bien, pero con Swift 3 obtienes esta advertencia .......

Falta '.self' para referencia al metatipo de tipo 'General'

Parece querer esto

self.above(General.self).clickedHamburgerMenuButton()

1) Parece ... peligroso ... cambiarGeneral aGeneral.self - de hecho es seguro y es elque significa lo mismo comoGeneral en Swift <3?

2) en la extensión

    public func above<T>(_ : T.Type)->(T)

¿Por qué es un metatipo? Hice algo mal"y hacer que pida un metatipo en lugar de solo un tipo?

2) ¿Qué demonios es un "metatipo"? (No puedo, realmente, encontrarlo explicado como tal en ningún lado). Es decir, qué "general" puede significar allí aparte de "la clase misma". (No es una instancia, o una instancia estática, o cualquier otra cosa ...)

Respuestas a la pregunta(1)

Su respuesta a la pregunta