首页 文章

在我们的Swift文件中,我在哪里导入swift模块?

提问于
浏览
0

我正在阅读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 ?

    }
}

我们可以使用 printSwift.print ,我只是想问一下,苹果如何隐式导入Swift模块?而且很明显,我们必须导入,如果可以隐式导入 Swift 模块,为什么有苹果不隐式导入 UIKit

我的混淆是如何隐式导入 Swift 模块?

2 回答

  • 0

    隐式导入 Swift 模块是一种硬编码到Swift编译器中的行为,专门用于 Swift 模块 .

  • 0

    参考Alexandex的,我最终找到doc

    我们可以看到 Clang importer

    Clang导入程序(在lib / ClangImporter中实现)导入Clang模块并将它们导出的C或Objective-C API映射到相应的Swift API . 生成的导入AST可以通过语义分析来引用 .

相关问题