Swift appel de méthodes statiques: type(de: auto) vs explicite nom de la classe

Dans swift, une instance func ne pouvez pas appeler un static/class func sans la préfixation de l'appel de méthode par le nom de la classe. OU vous pouvez utiliser type(of: self), e.g

class Foo {
    static func doIt() { }

    func callIt() {
        Foo.doIt() //This works
        type(of: self).doIt() //Or this

        doIt() //This doesn't compile (unresolved identifier)
    }
}

Ma question est, quelle est la différence ici?
Est-ce simplement une question de style de codage, ou est-il une différence, par exemple, statique ou dynamique, l'expédition se passe?

Si c'est juste le style de codage, ce qui est le style préféré?

  • Je ne crois pas qu'il existe une répartition dynamique. Nous ne sommes pas en Objective-C monde car il n'y a pas de @objc, dynamic, ou NSObject héritage.
  • En fait Swift classe sont Obj-C classes sous le capot (au moins lors de l'Obj-C runtime est incluse). Et "pure" Swift n'avez répartition dynamique en trop (pensez protocoles) – ce n'est pas seulement un Obj-C chose.
  • Je sais que Swift classes héritent de SwiftObject, mais est-il de même avec la solution open source d'exécution (à l'exclusion des protocoles)?
  • Ouais, je viens de modifier mon commentaire à la note que je n'ai pas regardé l'open source, de l'exécution dans les détails, mais je ne crois pas que Swift classes sont basées sur l'Obj-C des classes, comme il n'y a pas l'Obj-C runtime.
  • Suivre cette proposition pour apple pensées à ce sujet: github.com/apple/swift-evolution/blob/master/proposals/...