1
42
不,但你不需要它,没有成本
这就是TLDR。关于整个故事,请继续阅读。。。
在(Obj)C中,使API可用于源代码文件的旧方法是
文本包含
。预处理器将看到
所以,几年前我们得到了预编译的头文件,你可以把
除此之外,文本包含还有一个潜在的脆弱性问题。如果你
无论如何,即使是预编译的头文件,文本包含也不是很好,所以在Xcode 5中,苹果引入了 模块 (事实上,不仅仅是苹果。 They're in the LLVM/Clang compiler suite, so they're open source. )模块基于 语义导入 ,而不是文本包含,也就是说,模块在抽象级别告诉编译器它为源代码提供了哪些API符号,而不是将这些符号的定义粘贴在文本中,这样它们就不会脆弱,而且它们在后端单独预编译,这样构建项目就可以保持快速。 模块现在是ObjC项目的默认模块。(请注意,如果您创建了一个新的ObjC项目,它将不再包含预编译头。您可以关闭模块,因此如果您有一个旧项目,您可能仍然使用文本包含和预编译的头。)您可以在 Session 404 from WWDC 2013 . 为什么所有这些关于ObjC的事情?我们说的是斯威夫特,对吧?嗯,Swift基于很多相同的基础设施。
Swift从一开始就使用模块,所以它总是基于语义导入。这意味着构建时性能不会受到影响,也不会出现脆弱性。所有的斯威夫特
所以唯一的成本是
更新:
此外,您的选择
例如,编译器如何优化泛型和静态/动态分派取决于给定文件中可见的声明,因此如果
显式导入也有助于提高清晰度和可读性。如果
“但我讨厌把同样的几个
|
2
20
然后,您可以在每个文件中使用外部库,而无需
参考文献: |
4
0
您可以创建将导入依赖项的模块,并仅导入它。
例如呼叫
每次导入都应以开头
例如:
|
tryingmybest09 · 设置出生日期排序不正确 2 年前 |
Dane234345 · 从另一个文件中的函数导入变量 2 年前 |
MBF · PHP导入/解析XML文件内容保存到数据库 2 年前 |
benroths · PyQt5/Python3参考qss文件 2 年前 |
rm.rf.etc · Jupyter笔记本电脑组织,带有可重用代码 2 年前 |
artooras · 从本地文件导入到下一个文件。配置。js 2 年前 |
ash · 在Solr中索引JSON文件名和JSON内容 6 年前 |