Я пытаюсь использовать Károly Lőrentey B-tree OrderedSet в проекте. Однако я столкнулся с проблемой, когда я не могу объявить неквалифицированный OrderedSet<T>, потому что имя конфликтует между Foundation NSOrderedSet (импортировано как OrderedSet в Swift 3) и BTree OrderedSet.
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
Чтобы разрешить этот конфликт, вы обычно квалифицируете имя, и это даст вам BTree.OrderedSet<T>. Тем не менее, модуль BTree также содержит класс с именем BTree. Если я пишу BTree.OrderedSet, Swift считает, что я имею в виду тип с именем OrderedSet, который вложен в тип BTree.BTree.
let set = BTree.OrderedSet<Int>()
// error: reference to generic type 'BTree' requires arguments in <...>
Если я не import BTree, я не могу вообще использовать имя BTree.
// no import BTree
let set = BTree.OrderedSet<Int>()
// error: use of undeclared type 'BTree'
Как я могу устранить эту двусмысленность между типом BTree и BTree?