Swift 是否可以为导入设置别名?
在c#中,当引入一个与现有代码有很多名称冲突的库时,有一种方法可以为导入别名,这样就不需要为每次使用完全澄清名称空间。例如:Swift 是否可以为导入设置别名?,swift,swift3,Swift,Swift3,在c#中,当引入一个与现有代码有很多名称冲突的库时,有一种方法可以为导入别名,这样就不需要为每次使用完全澄清名称空间。例如: using MyCompany.MyLibrary.Model as MMM 那你就可以做了 MMM.MyObject 而不是 MyCompany.MyLibrary.Model.MyObject 随着最近对swift 3.0的更新,我发现我的一些模型对象现在与Foundation类型发生冲突,我被迫用Foundation.classname在类名中加上NS前缀。如
using MyCompany.MyLibrary.Model as MMM
那你就可以做了
MMM.MyObject
而不是
MyCompany.MyLibrary.Model.MyObject
随着最近对swift 3.0的更新,我发现我的一些模型对象现在与
Foundation
类型发生冲突,我被迫用Foundation.classname
在类名中加上NS
前缀。如果我能像上面给出的c#示例一样输入模型库的导入,那就太好了。这在swift 3.0中可能吗?如果没有,是否有另一种策略来避免名称冲突,这将导致必须在每个类型前面写入框架名称?我正在考虑像我们在obj-c中那样重新为类名加前缀,但我正在尝试在这样做之前探索我的选择。通常
您可以导入特定实体以及整个模块:
import struct SomeModule.SomeStruct
import class SomeModule.SomeClass
import func SomeModule.someFunc
请参见“可导入”实体类型的完整列表
然后,您可以创建一个typealias
:
typealias SMSomeStruct = SomeModule.SomeStruct
而且,从Swift 3开始,没有结合别名的import
声明
考虑与基础
实体的碰撞
比如说,您有一个类SomeModule.NumberFormatter
在单独的Swift文件(在导入项目中)中创建两个typealias
E就足够了,以防止冲突:
import Foundation
import SomeModule
typealias NumberFormatter = Foundation.NumberFormatter
typealias SMNumberFormatter = SomeModule.NumberFormatter
即使在
Swift 5
中,也无法在导入语句中直接使用别名
但幸运的是,我可以用以下方法解决这个问题:
导入类型别名MyModule.MyInnerClass
我的意思是,如果我们是模块的开发人员,只需将别名移动到模块中,如:
公共类型别名MyInnerClass=MyClass.MyInnerClass
公共类MyClass{
公共类MyInnerClass{
//这里有一些很酷的逻辑。。。
}
}
从Swift 3开始?我相信这一功能从一开始就出现在Swift中。我想你是对的。写“截至Swift 3”的主要原因是我不能确定它在Swift 4+中是否正确。我删除了第一个“从Swift 3开始”,因为苹果几乎不可能从该语言中删除该功能。