什么是Swift中的import func,struct,class和@_exported?

时间:2016-12-06 16:30:14

标签: swift swift3 swift-package-manager

在Apple的Swift Package管理器的github中,他们使用

import func POSIX.isatty
import func libc.strerror_r
import var libc.EINVAL 
import var libc.ERANGE
import struct PackageModel.Manifest

source

还有一个文件,其中唯一的代码是@_exported source

@_exported import func libc.fileno

这是一个Swift 3功能吗?我无法在任何地方找到您可以在Swift文档中导入类型而在@_exported上没有任何内容。

1 个答案:

答案 0 :(得分:11)

您只能导入模块的特定部分,而不能导入整个模块:

  

提供更多详细信息限制导入的符号 - 您可以在模块或子模块中指定特定子模块或特定声明。使用此详细表单时,只有导入的符号(而不是声明它的模块)在当前作用域中可用。

来自Import Declaration

例如,import func POSIX.isatty将从模块isatty导入函数POSIX,而不是导入整个模块POSIX(这是BIG)。

@_exported属性以下划线开头。这意味着它是一个私有的Swift属性。不是功能,实现细节。 简而言之,此属性允许您从另一个模块导出符号,就像它来自您的模块一样。