Ich versuche Károly Lőrenteys B-tree based OrderedSet
in einem Projekt zu verwenden. Ich stoße jedoch auf ein Problem, bei dem ich kein unqualifiziertes OrderedSet<T>
erklären kann, weil der Name zwischen Foundation NSOrderedSet
(importiert als OrderedSet
in Swift 3) und BTree
OrderedSet
widerspricht.Wie kann ich einen Typ und ein Modul mit dem gleichen Namen disambiguieren?
let set = OrderedSet<Int>()
// error: 'OrderedSet' is ambiguous for type lookup in this context
// Found this candidate: Foundation.OrderedSet:3:14
// Found this candidate: BTree.OrderedSet:12:15
diesen Konflikt zu lösen, würden Sie normalerweise den Namen qualifizieren, und das würde Sie BTree.OrderedSet<T>
geben. Das Modul BTree
enthält jedoch auch eine Klasse mit dem Namen BTree
. Wenn ich BTree.OrderedSet
schreibe, denkt Swift, dass ich auf einen Typ mit dem Namen OrderedSet
verweise, der im BTree.BTree
-Typ geschachtelt ist.
let set = BTree.OrderedSet<Int>()
// error: reference to generic type 'BTree' requires arguments in <...>
Wenn ich nicht import BTree
tun, kann ich nicht verwenden, um die BTree
Namen überhaupt.
// no import BTree
let set = BTree.OrderedSet<Int>()
// error: use of undeclared type 'BTree'
Wie kann ich diese Mehrdeutigkeit zwischen der BTree
Art lösen und dem BTree
-Modul?
Das ist eine gute Frage. Kannst du 'typalias' eins von ihnen? – NRitH
Ich kann keine von ihnen "typalias" wegnehmen, typialiases kann nur Namen erstellen ('OrderedSet' bleibt ein gültiger, wenn zweideutiger Name für beide Typen). Aber selbst zu Typien eins muss ich in der Lage sein, darauf zu verweisen ... – zneak
Da ich Foundation in diesem Projekt nicht verwende, konnte ich mich durch Entfernen von '#import' in der überbrückte Header. Das löst jedoch nicht das allgemeine (und sehr reale) Problem. –
zneak