问题
I have a class declared at the global scope and another class with the same name that is nested within some class.
class Address {
var someProperty: String?
}
class ThirdPartyAPI {
class Address {
var someOtherProperty: String?
init(fromAddress address: Address) {
self.someOtherProperty = address.someProperty
}
}
}
The question is: how can I refer to a global class instead of the inner one from its initialiser? In the example given I've got an error Value of type 'ThirdPartyAPI.Address' has no member 'someProperty'
, which means that compiler refers to the inner Address
instead of a global one.
回答1:
Use 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:
You can refer to types uniquely by prepending the module name. So if
class Address {
var someProperty: String?
}
is defined in "MySuperApp" then you can refer to it as
MySuperApp.Address
:
class ThirdPartyAPI {
class Address {
var someOtherProperty: String?
init(fromAddress address: MySuperApp.Address) {
self.someOtherProperty = address.someProperty
}
}
}
(But if you have a choice then try to avoid the ambiguity to make your code easier to understand.)
来源:https://stackoverflow.com/questions/34380112/how-to-refer-to-a-global-type-from-within-a-class-that-has-a-nested-type-with-th