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

los*_*hua 8 swift swift3 swift-package-manager

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

import func POSIX.isatty
import func libc.strerror_r
import var libc.EINVAL 
import var libc.ERANGE
import struct PackageModel.Manifest
Run Code Online (Sandbox Code Playgroud)

资源

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

@_exported import func libc.fileno
Run Code Online (Sandbox Code Playgroud)

这是一个Swift 3功能吗?我找不到任何可以在Swift文档中导入类型的内容,也没有找到任何内容@_exported.

Sul*_*han 12

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

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

来自进口声明

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

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

  • “这个东西不会在语言中存在太久。” 实际上,“@_exported”仍然存在,并且建议我在[此处]使用它(https://forums.swift.org/t/swift-packages-sharing-code- Between-libraries-while-exusing-some- apis-from-the-shared-code/49605/3) 适用于我的特定用例。 (2认同)