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?
2
A
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
}
}
}
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.)
Wow! C'est facile. Grand merci! –