一个模块是代码分发的单个单位 - 一个框架或应用程序,作为单个单位构建和发送,并可以由Swift的import关键字导入另一个模块。在Xcode中,每个构建目标(例如应用程序包或框架)在Swift中被视为单独的模块。如果将应用程序代码的各个方面组合成一个独立的框架 - 可能是为了封装和重用跨多个应用程序的代码 - 那么在应用程序中导入并使用该框架时,以及在另一个框架中使用它时,该框架中定义的所有内容都将成为单独的模块的一部分。
如
文档所示,模块是应用程序或框架(库)。如果您创建了具有类A和B的项目,则它们是同一模块的一部分。同一项目中的任何其他类都可以从这些类继承。但是,如果将该项目导入到另一个项目中,则来自另一个项目的类将无法子类化A或B。为此,您必须在声明之前添加open指示符。
基本上,如果您只处理单个应用,则正在一个单个模块中工作,除非声明为private或fileprivate,否则类可以相互子类化。
编辑
让我们在模块(项目)Module1中拥有以下类:
class A {
}
由于这个类不是 open
,所以只能在同一模块内进行子类化。也就是说,下面的类:
class B: A {
}
这段代码只能在同一个项目的Module1中编写。
如果你将Module1作为依赖添加到项目Module2中,并尝试执行以下操作:
import Module1
class C: A {
}
它不会编译。那是因为类A不是open(换句话说,它的访问权限为public或更低),并且它不属于与C相同的模块。A属于Module1,C属于Module2。
注意:import关键字将一个依赖模块导入到当前模块中。如果在项目中写入import UIKit,则告诉编译器您想在模块中使用UIKit模块。import不定义当前模块。当前模块是当前项目。
在文件开头添加import UIKit不会改变也不会定义文件所属的模块。它只是告诉编译器,您想在该文件中使用来自UIKit模块的代码。
open
的任何理由。 - Milan Nosáľ