2015-12-20 67 views
2

我有一个在全局范围声明的类和另一个具有相同名称的嵌套在某个类中的类。如何从具有相同名称的嵌套类型的类中引用全局类型?

class Address { 
    var someProperty: String? 
} 

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

现在的问题是:我如何从它的初始化程序引用全局类而不是内部类?在给出的示例中,我得到了一个错误Value of type 'ThirdPartyAPI.Address' has no member 'someProperty',这意味着编译器引用内部的Address而不是全局的。

回答

6

使用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

哇!这很容易。万分感谢! –

2

你可以参考各类唯一在前面加上模块的名字。 所以如果

class Address { 
    var someProperty: String? 
} 

在“MySuperApp”的定义,那么你可以称其为 MySuperApp.Address

class ThirdPartyAPI { 

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

(但如果你有一个选择,然后尽量避免歧义,使 您代码更容易理解。)

相关问题