Dans Swift, nous pouvons écrire la construction suivante:
class SomeClass {}
let metaMetatype: SomeClass.Type.Type = SomeClass.Type.self
Ici metaMetatype
n'est pas conforme au type AnyObject
( SomeClass.Type
fait). La construction peut être encore plus longue, tant que nous le souhaitons:
let uberMetatype: SomeClass.Type.Type.Type.Type.Type.Type.Type.Type.Type.Type = SomeClass.Type.Type.Type.Type.Type.Type.Type.Type.Type.self
Ces constructions ont-elles un sens? Si SomeClass.Type.Type
n'est pas un objet, qu'est-ce que c'est et pourquoi pouvons-nous le déclarer?