Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 是否可以为导入设置别名?_Swift_Swift3 - Fatal编程技术网

Swift 是否可以为导入设置别名?

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前缀。如

在c#中,当引入一个与现有代码有很多名称冲突的库时,有一种方法可以为导入别名,这样就不需要为每次使用完全澄清名称空间。例如:

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开始”,因为苹果几乎不可能从该语言中删除该功能。