swift – 如何消除具有相同名称的类型和模块的歧义?

swift – 如何消除具有相同名称的类型和模块的歧义?,第1张

概述我正在尝试在一个项目中使用KárolyLőrentey的 B-tree based OrderedSet。但是,我遇到了一个问题,我无法声明一个不合格的OrderedSet< T>因为名称在Foundation的NSOrderedSet(在Swift 3中作为OrderedSet导入)和BTree的OrderedSet之间发生冲突。 let set = OrderedSet<Int>()// e 我正在尝试在一个项目中使用KárolyLőrentey的 B-tree based OrderedSet。但是,我遇到了一个问题,我无法声明一个不合格的OrderedSet< T>因为名称在Foundation的NSOrderedSet(在Swift 3中作为OrderedSet导入)和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认为我指的是嵌套在BTree.BTree类型中的名为OrderedSet的类型。

let set = BTree.OrderedSet<Int>()// error: reference to generic type 'BTree' requires arguments in <...>

如果我不导入BTree,我根本不能使用BTree名称。

// no import BTreelet set = BTree.OrderedSet<Int>()// error: use of undeclared type 'BTree'

如何解决BTree类型和BTree模块之间的这种歧义

可以使用鲜为人知的import(class | struct | func | protocol | enum)Module.Symbol语法消除类型的歧义。
import struct BTree.OrderedSet

从这一点开始,OrderedSet明确地引用了BTree中的那个。

如果在某些文件中这仍然是不明确的或次优的,您可以使用typealiases创建一个Swift文件来重命名导入:

// a.swiftimport struct BTree.OrderedSettypealias BTreeOrderedSet<T> = BTree.OrderedSet<T>
// b.swiftlet foo = OrderedSet<Int>() // from Foundationlet bar = BTreeOrderedSet<Int>() // from BTree

为Swift 3讨论了一种新的语法,但它失败了。

总结

以上是内存溢出为你收集整理的swift – 如何消除具有相同名称的类型和模块的歧义?全部内容,希望文章能够帮你解决swift – 如何消除具有相同名称的类型和模块的歧义?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1051978.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存