2015-12-20 3 views
2

J'ai une classe déclarée à l'étendue globale et une autre classe avec le même nom qui est imbriqué dans une classe. La question est: comment puis-je faire référence à une classe globale à la place de la classe interne à partir de son initialiseur? Dans l'exemple donné, j'ai une erreur Value of type 'ThirdPartyAPI.Address' has no member 'someProperty', ce qui signifie que le compilateur fait référence à l'intérieur Address au lieu d'un global.Comment faire référence à un type global dans une classe qui a un type imbriqué avec le même nom?

Répondre

6

Utilisez typealias

class Address { 
    var someProperty: String? 
} 

typealias GlobalAddress = Address 

class ThirdPartyAPI { 
    class Address { 
     var someOtherProperty: String? 
     init(fromAddress address: GlobalAddress) { 
      self.someOtherProperty = address.someProperty 
     } 
    } 
} 
+0

Wow! C'est facile. Grand merci! –

2

Vous pouvez vous référer aux types uniquement par préfixer le nom du module. Donc, si

class Address { 
    var someProperty: String? 
} 

est défini dans « MySuperApp » vous pouvez parler comme MySuperApp.Address:

class ThirdPartyAPI { 

    class Address { 
     var someOtherProperty: String? 
     init(fromAddress address: MySuperApp.Address) { 
      self.someOtherProperty = address.someProperty 
     } 
    } 
} 

(Mais si vous avez le choix alors essayez d'éviter l'ambiguïté de faire votre code plus facile à comprendre.)