2015-12-20 2 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 
     } 
    } 
} 

(Но если у вас есть выбор, то попытайтесь избежать двусмысленности, чтобы ваш код легче понять.)

Смежные вопросы