一尘不染

快速模块是什么意思?

swift

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

file1.swift

import UIKit

class A: B {
}

file2.swift

import UIKit

class C: A{     
}

我读到公共类不能在模块外部子类化。在这里,我有C类。我试图了解模块在这里的含义。我为两个文件导入了相同的模块UIKit。那么,这两个文件属于同一模块吗?这样我就可以继承。还是两个文件都具有不同的模块,甚至我导入相同的UIKit?

谁能解释什么是模块?

资源:

具有公共访问权限或更高访问权限级别的类只能在定义它们的模块内被子类化。

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


阅读 265

收藏
2020-07-07

共1个答案

一尘不染

模块是代码分发的单个单元—一个框架或应用程序,是作为单个单元构建和交付的,并且可以由另一个模块使用Swift的import关键字导入。

Xcode中的每个构建目标(例如应用程序捆绑包或框架)在Swift中都被视为一个单独的模块。如果您将应用程序代码的各个方面组合为一个独立的框架(可能是在多个应用程序之间封装和重用该代码),那么当在应用程序中导入和使用该框架时,您在该框架中定义的所有内容都将成为单独模块的一部分,或在其他框架中使用它时。

文档所示,该模块是应用程序或框架(库)。如果您使用A和创建类的项目B,则它们是同一模块的一部分。
同一项目 中的任何其他类都可以从这些类继承。但是,如果您将该项目导入另一个项目,则该另一个项目中的类将不能成为subclass
AB。为此,您必须open在其声明之前添加指标。

基本上,如果您使用一个应用程序,那么您将使用一个模块,除非声明为privatefileprivate,否则这些类可以彼此子类化。

编辑

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

class A {
}

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

class B: A {
}

只能Module1 的同一项目中编写。

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

import Module1

class C: A {
}

它不会编译。这是因为class A不是open(换句话说,它具有访问权限public或更少的访问权限),并且它不与属于同一模块CA属于
Module1C属于 Module2

注意

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

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

2020-07-07