在c#中引入与现有代码有很多名称冲突的库时,有一种方法可以对导入进行别名,因此您无需为每次使用完全阐明命名空间。例如:
using MyCompany.MyLibrary.Model as MMM
然后你可以做
MMM.MyObject
而不是
MyCompany.MyLibrary.Model.MyObject
随着最近对swift 3.0的更新,我发现我的一些模型对象现在与Foundation
类型发生冲突,并且我被迫为曾经拥有{{1}的东西添加前缀使用NS
在类名中添加前缀。如果我可以输入别名导入我的模型库就好了,就像上面给出的c#示例一样。这在swift 3.0中是否可行?如果没有,是否有另一种策略可以避免名称冲突导致必须在每种类型前面编写框架名称?我正在考虑像我们在obj-c中那样回到我的班级名称前缀,但是在我这样做之前我正试图探索我的选择。
答案 0 :(得分:12)
<强>一般强>
您可以导入特定实体以及整个模块:
import struct SomeModule.SomeStruct
import class SomeModule.SomeClass
import func SomeModule.someFunc
查看&#34; importable&#34;的完整列表实体类型in the import-kind
rule of Swift grammar。
然后您可以创建typealias
:
typealias SMSomeStruct = SomeModule.SomeStruct
而且,从Swift 3开始,没有import
声明与别名相结合。
考虑与Foundation
实体的冲突
说,你有一个班级SomeModule.NumberFormatter
。
在单独的Swift文件(在导入项目中)中创建两个typealias
以防止冲突就足够了:
import Foundation
import SomeModule
typealias NumberFormatter = Foundation.NumberFormatter
typealias SMNumberFormatter = SomeModule.NumberFormatter
答案 1 :(得分:0)
即使在 Swift 5
中也不能直接在 import-statement 中使用别名!?
但幸运的是,我可以通过以下方式解决它:
import typealias MyModule.MyInnerClass
我的意思是,如果我们是模块的开发者,只需将别名移动到模块中,例如:
public typealias MyInnerClass = MyClass.MyInnerClass
public class MyClass {
public class MyInnerClass {
// Some cool logic here...
}
}