我正在阅读matt的iOS pragraming书,当我在这里阅读时:
Swift本身是在模块中定义的 - Swift模块 . 您的代码总是隐式导入Swift模块 . 您可以通过使用行导入Swift启动文件来使其显式化;没有必要这样做,但它也没有坏处 . 这个事实很重要,因为它解决了一个重大的谜团:印刷之类的东西来自哪里,为什么可以在任何消息之外的任何对象中使用它们? print实际上是一个在Swift模块顶层声明的函数,你的代码可以看到Swift模块的顶级声明,因为它导入了Swift . 就代码而言,打印功能因此变成了与任何其他功能一样的普通顶级功能;它对您的代码是全局的,您的代码可以在不指定其命名空间的情况下谈论它 . 你可以指定它的命名空间 - 说Swift.print(“你好”)之类的东西是完全合法的 - 但你可能永远不会,因为没有名称冲突需要解决 .
比如,在我的测试中 ViewController
:
import UIKit
//import Swift // here we can import Swift. it is okay
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
Swift.print("hello, matt") // where we import the Swift ?
}
}
我们可以使用 print
或 Swift.print
,我只是想问一下,苹果如何隐式导入Swift模块?而且很明显,我们必须导入,如果可以隐式导入 Swift
模块,为什么有苹果不隐式导入 UIKit
?
我的混淆是如何隐式导入 Swift
模块?
2 回答
隐式导入
Swift
模块是一种硬编码到Swift编译器中的行为,专门用于Swift
模块 .参考Alexandex的,我最终找到doc
我们可以看到
Clang importer
: