2016-09-16 22 views
6

W języku C# podczas wciągania biblioteki, która ma wiele kolizji nazw z istniejącym kodem, istnieje sposób na alias importu, więc nie trzeba w pełni wyjaśniać przestrzeni nazw dla każdego użycia. np:Czy można alias importować?

using MyCompany.MyLibrary.Model as MMM 

następnie można zrobić

MMM.MyObject 

zamiast

MyCompany.MyLibrary.Model.MyObject 

Dzięki najnowszej aktualizacji do Swift 3.0, znalazłem kilka moich modeli obiektów są teraz kolizji z typy Foundation, i byłem zmuszony do przedrostka przedrostków, które kiedyś miały prefiks NS w nazwie klasy z Foundation.classname. Byłoby wspaniale, gdybym mógł wpisać alias import mojej biblioteki modeli, podobnie jak w powyższym przykładzie C#. Czy to możliwe w szybkim 3.0? Jeśli nie, to czy istnieje inna strategia unikania kolizji nazw, która spowodowałaby konieczność napisania nazwy struktury przed każdym typem? Rozważam powrót do prefiksowania nazw klas tak, jak zrobiliśmy to w obj-c, ale próbuję zbadać moje opcje, zanim to zrobię.

Odpowiedz

7

Ogólnie

Można importować konkretny podmiot, jak również całego modułu:

import struct­ SomeModule.SomeStruct 
import class­ SomeModule.SomeClass 
import func SomeModule.someFunc 

Zobacz pełną listę „przywozowe” typów jednostek in the import-kind rule of Swift grammar.

Następnie można utworzyć typealias:

typealias SMSomeStruct = SomeModule.SomeStruct 

, a od Swift 3, nie ma deklaracji import połączeniu z aliasingu.

Uwzględniając zderzeniom z Foundation Podmioty

Say, masz klasę SomeModule.NumberFormatter.

Wystarczy utworzyć dwa typealias es w oddzielnym pliku Swift (w projekcie importowania) w celu zapobiegania kolizjom:

import Foundation 
import SomeModule 

typealias NumberFormatter = Foundation.NumberFormatter 
typealias SMNumberFormatter = SomeModule.NumberFormatter 
+0

jak Swift 3? Wierzę, że ta funkcja była w Swift od samego początku. – Sulthan

+1

Przypuszczam, że masz rację. Głównym powodem napisania "od Swift 3" było to, że nie jestem pewien, czy to będzie prawda w Swift 4+. Usunąłem pierwsze "od Swift 3", ponieważ jest prawie niemożliwe, aby Apple usunął funkcję z tego języka. –

+0

Niesamowite dzięki za odpowiedź! –

Powiązane problemy