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

举报
文如秋雨 发表于 2022/08/30 13:26:52 2022/08/30
【摘要】 在本章中,你将学会AccessControl访问控制的使用方法。前言和Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。这同时也是对自己学习Swift语言过程的知识整理。如有错误,以你为准。项目创建我们新建一个PlayGround项目,命名为SwiftAccessControl。访问控制的定义访问控制,是...
在本章中,你将学会AccessControl访问控制的使用方法。

前言


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

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

如有错误,以你为准。

项目创建


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





访问控制的定义


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

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

其他概念的定义


模块:以独立单元构建和发布的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 {}  //默认是内部使用类型





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

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

自定义访问级别


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

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





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

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

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

访问级别的使用


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

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

//函数访问级别

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


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

但由于该函数中一个类FilePrivateClass为fileprivate访问级别,另一个类PrivateClass是private访问级别。

因此,这个函数根据其返回值类型的最低访问级别定义,则整个函数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) {
    // 函数实现
}

以上就是本章的全部内容。
快来动手试试吧!
如果本专栏对你有帮助,不妨点赞、评论、关注~
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。