IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> [Swift学习] 访问控制 Access Control, private、public、filePrivate等修饰符 -> 正文阅读

[移动开发][Swift学习] 访问控制 Access Control, private、public、filePrivate等修饰符

private , fileprivate,internal,public,open

从整体看,权限 private < fileprivate < internal < public < open

swift官方定义

Swift Access Control

Swift provides five different access levels for entities within your code. These access levels are relative to the source file in which an entity is defined, and also relative to the module that source file belongs to.

Open access and public access enable entities to be used within any source file from their defining module, and also in a source file from another module that imports the defining module. You typically use open or public access when specifying the public interface to a framework. The difference between open and public access is described below.

Internal access enables entities to be used within any source file from their defining module, but not in any source file outside of that module. You typically use internal access when defining an app’s or a framework’s internal structure.

File-private access restricts the use of an entity to its own defining source file. Use file-private access to hide the implementation details of a specific piece of functionality when those details are used within an entire file.

Private access restricts the use of an entity to the enclosing declaration, and to extensions of that declaration that are in the same file. Use private access to hide the implementation details of a specific piece of functionality when those details are used only within a single declaration.

Private

private是这些修饰词中,访问权限最严格的。private用来修饰类和方法或者属性时,该类、属性、方法无法在该类以外使用,比如修饰类时,其他类无法使用该类

在这里插入图片描述
修饰方法时,其他类无法使用该方法
在这里插入图片描述
修饰属性时,其他类无法使用该属性,读取也不行

在这里插入图片描述
这里其实稍微有个悖论,如果用private来修饰类时,其他类都无法使用该类,那这个类的设计目的是什么呢?只能自调用?

fileprivate

fileprivate这个修饰词挺有意思,它意味着修饰的东西只能在该文件中访问,而不能在其他文件中访问(我学过的语言中,只有swift是这么设计的,但具体为什么设计基于文件的访问权限,我没有查到资料 )

比如在A.swift中,其他类可以访问该类,而在B.swift中是无法访问filePrivateClass的
请添加图片描述
请添加图片描述

internal

internal是默认的修饰词,在该模块内部可以被访问。 如果是封装库,则整个库都可以访问该类,而库外的代码是无法访问的。 如果是App中的类,则整个App都可以访问该类

Public 和 Open

这两个修饰词之所以放在一起,是因为他们的属性很相似,都是在模块的外部可以访问。 但是Public的修饰内容在外部无法被继承或者重写,而Open可以

使用原则

Access levels in Swift follow an overall guiding principle: No entity can be defined in terms of another entity that has a lower (more restrictive) access level.
不能用一个更低访问级别的实体来定义当前实体

这句话看着不太好懂,我觉得可以这么理解,不要破坏一个类的权限,比如类filePrivateClass是fileprivate,如果你用public修饰,则破坏了它的权限,因为其根本属性时fileprivate,用public修饰就让编译器不知道如何来编译了
请添加图片描述

Getter和setter

我们使用Objective-C的时候,通常会用readOnly等修饰词来控制读写权限,而在swift中,我们可以通过private修饰set和get做到

可读写

默认的权限internal即可

class Person : NSObject {
    var name : String? = nil
}

不可读

class Person : NSObject {
    private var name : String? = nil
}

不可以写

class Person : NSObject {
    private(set) var name : String? = nil
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:23:00  更:2022-09-04 01:23:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:43:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码