2016-05-02 12 views
8

Próbuję odwołać się do typu wewnątrz struktury, która ma typ, którego nazwa jest taka sama, jak ramy. Łatwiej wytłumaczyć w kodzie:Jak odnieść się do typu w module, który ma typ o takiej samej nazwie jak moduł, w którym się znajduje?

W ram Something

public struct A { ... } 
public class Something { ... } 

W ram OtherFramework

public struct A { ... } 

Następnie na głównym projektu importować oba moduły:

import Something 
import OtherFramework 

let myA = A() // 'A' is ambiguous for type lookup in this context 

i gdybym do

import Something 
import OtherFramework 

let myA = Something.A() // 'A' is not a member type of 'Something' 

Czy istnieje jakiś sposób odniesienia się do A w Something poza zmianą ram?

+0

To fantastyczne pytanie! Nie znalazłem dotąd sposobu, założyłem, że to błąd. – HAS

+0

Jest to praca dookoła, ale prawdopodobnie możesz podzielić swoją klasę na rozszerzenia, które dotyczą tylko jednego z frameworków. – PeejWeej

+0

@ Aleph7 Właśnie napisałem o tym problem: https://bugs.swift.org/browse/SR-1389 Mam nadzieję, że wszystko w porządku z tym – HAS

Odpowiedz

6

Jednym ze sposobów nie jest zaimportowanie całego modułu, zaimportowanie tylko określonych potrzebnych typów, np. zaimportować klasę Something w module Something:

import class Something.Something 
1

Jednym rozwiązaniem znalazłem jest utworzenie oddzielnego pliku .swift z tym:

import Something 
typealias SomethingA = A 

A potem

import Something 
import OtherFramework 

let myA = SomethingA() 
-1

próbowałeś

import Something 
import OtherFramework 

let myA = Something.Something.A() 
Powiązane problemy