模块在swift中意味着什么?

Joh*_*ohn 13 swift

例如,我有两个名为file1.swift和file2.swift的文件.

file1.swift

import UIKit

class A: B {
}
Run Code Online (Sandbox Code Playgroud)

file2.swift

import UIKit

class C: A{     
}
Run Code Online (Sandbox Code Playgroud)

我正在读取公共类不能在模块之外进行子类化.这里我有子类C.我试图理解模块在这里意味着什么.我为这两个文件导入了相同的模块UIKit.那么这两个文件是同一个模块吗?这样我就可以继承了.或者两个文件都有不同的模块,即使我导入相同的UIKit?

任何人都可以解释什么是模块?

资源:

具有公共访问权限或任何更严格的访问级别的类只能在定义它们的模块中进行子类化.

具有公共访问权限或任何更具限制性的访问级别的类成员只能在定义它们的模块中被子类覆盖.

Mil*_*sáľ 17

模块是一个代码分发单元 - 一个框架或应用程序,它作为一个单元构建和发布,可以由另一个模块使用Swift的import关键字导入.

Xcode中的每个构建目标(例如应用程序包或框架)都被视为Swift中的单独模块.如果您将应用程序代码的各个方面组合在一起作为一个独立的框架 - 也许是为了跨多个应用程序封装和重用该代码 - 那么您在该框架中定义的所有内容都将在导入并在应用程序中使用时成为单独模块的一部分,或者当它在另一个框架中使用时.

文档所示,模块是应用程序或框架(库).如果您创建了一个类项目AB,它们是同一个模块的一部分.同一项目中的任何其他类都可以从这些类继承.不过,若你导入项目到另一个项目,从另一个项目中的类将无法继承A,也没有B.为此,您必须open在声明之前添加指标.

基本上,如果你在单个应用程序上工作,那么你在一个单独的模块中工作,除非声明为privateor fileprivate,否则这些类可以相互子类化.

编辑

让我们在模块(项目)Module1中有以下类:

class A {
}
Run Code Online (Sandbox Code Playgroud)

由于此类不是open,因此只能在同一模块中进行子类化.这意味着以下课程:

class B: A {
}
Run Code Online (Sandbox Code Playgroud)

只能Module1中的同一个项目中编写.

如果将Module1添加为项目Module2的依赖项,并尝试执行此操作:

import Module1

class C: A {
}
Run Code Online (Sandbox Code Playgroud)

它不会编译.那是因为类A不是open(换句话说它有访问权限public或更少)并且它不属于同一个模块C.A属于Module1,C属于Module2.

注意

importkeyword将依赖项模块导入当前模块.如果您import UIKit在项目中编写,则告诉编译器您要在模块UIKit中使用模块.import没有定义当前模块.当前模块是当前项目.

import UIKit在文件开头添加不会更改也不会定义文件所属的模块.它只是告诉编译器在该文件中您要使用UIKit模块中的代码.