Swift实用小册24: AccessControl访问控制的使用

简介: 在本章中,你将学会AccessControl访问控制的使用方法。

image.png

前言


Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。

这同时也是对自己学习Swift语言过程的知识整理。

如有错误,以你为准。

项目创建


我们新建一个PlayGround项目,命名为SwiftAccessControl

image.png

访问控制的定义


访问控制,是数据安全的一个基本组成部分,它规定了哪些源文件和模块中的代码可以访问我们写的代码。

通过访问控制,我们可以给类、结构体、枚举设置访问级别,也可以给这些类型的属性、函数、初始化方法、基本类型、下标索引等设置访问级别

其他概念的定义


模块:以独立单元构建和发布的Framework框架或Application应用。

源文件:单个源码文件,包含多个类和函数的定义。

访问控制的级别


Swift提供了4种访问级别:public、internal、fileprivate、private

关键字

访问级别

描述

public

完全公开

最高级别。可以访问自己模块中源文件的任何实体,其他人也可以通过引用这个模块访问源文件里面的实体

internal

内部使用

可以访问自己模块中源文件的实体,其他人不能访问

fileprivate

文件外私有

只能在源文件内部使用

private

完全私有

最低访问级别,只能在类中访问

一般情况下,如果我们不指定访问级别,那么我们代码中的所有实体都默认是internal级别。

访问控制的使用


我们可以通过修饰符public、internal、fileprivate、private来声明实体的访问级别。示例:

import UIKit
public class PublicClass {}     //完全公开
internal class InternalClass {}     //内部使用
fileprivate class FilePrivateClass {}   //文件外私有
private class PrivateClass {}   //完全私有
class SomeInternalClass {}  //默认是内部使用类型

image.png

Swift语言中,由于系统能够自动根据参数判断类型,这称之为隐性声明

当我们给类、结构体等显性声明了一个类型,那么这个类或结构体内的所有成员的访问内容都跟随显性声明的类型,这称之为传递。

自定义访问级别

我们也可以通过自定义类型的方式,给类、结构体、参数指定不同的访问控制级别,以达到不同场景的使用。示例:

//自定义类型
class Person {
    var name:String = "文如秋雨"
    fileprivate func fullName() {}
    private func getUser() {}
}

image.png

上述代码中,我们定义了一个类Person,我们没有声明其访问级别,因此默认为隐性的internal级别。

我们声明了一个String类型的name变量,由于传递的特点,它也是隐性的internal级别。

然后我们定义了一个fileprivate访问级别的方法fullName,和一个private访问级别的方法getUser

访问权限的取级


上述例子为单独的类的访问级别声明,当我们使用函数时,可能存在多个类,多个类分别属于不同的访问级别。

这时候,我们则根据函数返回类型的最低访问级别作为该函数的访问级别。示例:

//函数访问级别
func function() -> (FilePrivateClass, PrivateClass) {
    // 函数实现
}

image.png

上述代码中,我们定义了一个全局函数function,没有指定其访问级别,按照我们之前学习的访问控制的知识点,它是隐性的internal级别。

但由于该函数中一个类FilePrivateClassfileprivate访问级别,另一个类PrivateClassprivate访问级别。

因此,这个函数根据其返回值类型的最低访问级别定义,则整个函数function为隐性private访问级别。

枚举类、结构体亦是如此。而有子类继承父类的情况下,子类的访问级别不得高于父类的访问级别。

总的来说,访问级别是向下取级的。

本章代码


import UIKit
public class PublicClass {}     //完全公开
internal class InternalClass {}     //内部使用
fileprivate class FilePrivateClass {}   //文件外私有
private class PrivateClass {}   //完全私有
class SomeInternalClass {}  //默认是内部使用类型
//自定义类型
class Person {
    var name:String = "文如秋雨"
    fileprivate func fullName() {}
    private func getUser() {}
}
//函数访问级别
func function() -> (FilePrivateClass, PrivateClass) {
    // 函数实现
}

以上就是本章的全部内容。

快来动手试试吧!

如果本专栏对你有帮助,不妨点赞、评论、关注~

相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
3月前
|
区块链 Swift 数据安全/隐私保护
开心档之 Swift 访问控制访问控制
开心档之 Swift 访问控制访问控制
|
12月前
|
编译器 Swift 数据安全/隐私保护
开心档之 Swift 访问控制访问控制
Swift 访问控制访问控制可以限定其他源文件或模块中代码对你代码的访问级别。
|
数据安全/隐私保护 Swift
Swift实用小册26: 正则表达式的使用
在本章中,你将学会常用的正则表达式的使用方法。
257 3
Swift实用小册26: 正则表达式的使用
|
存储 Swift
Swift实用小册25: 高级运算符之位运算符的使用
在本章中,你将学会高级运算符的位运算符的使用方法。
207 0
Swift实用小册25: 高级运算符之位运算符的使用
|
Swift
Swift实用小册23: ARC自动引用计数机制的使用
在本章中,你将学会ARC自动引用计数机制的使用方法。
151 0
Swift实用小册23: ARC自动引用计数机制的使用
|
Swift
Swift实用小册22: OpaqueTypes不透明类型的使用
在本章中,你将学会OpaqueTypes不透明类型的使用方法。
243 0
Swift实用小册22: OpaqueTypes不透明类型的使用
|
Swift
Swift实用小册21: Generics泛型的使用
在本章中,你将学会Generics泛型的使用方法。
149 0
Swift实用小册21: Generics泛型的使用
|
存储 前端开发 Swift
Swift实用小册20: Protocol协议的使用
在本章中,你将学会Protocol协议的使用方法。
222 0
Swift实用小册20: Protocol协议的使用
|
存储 前端开发 Swift
Swift实用小册19:Extension扩展的使用
在本章中,你将学会Extension扩展的使用方法。
313 0
Swift实用小册19:Extension扩展的使用
|
Swift
Swift实用小册18:NestedTypes嵌套类型的使用
在本章中,你将学会NestedTypes嵌套类型的使用方法。
188 0
Swift实用小册18:NestedTypes嵌套类型的使用