当前位置: 首页 > news >正文

Swift4.0复习访问控制与作用域

1.访问等级:

open:

可以继承,可以重写。

public:

“public 访问等级能用于修饰所有文件作用域的函数、对象、协议、枚举、结构体、类以及各种类型中的属性与方法。用 public 所修饰的对象、函数、类型及类型的属性和方法能被其他模块所使用。但是其他模块不能继承当前所定义的类类型,也不能对当前类类型中的属性和方法进行重写。所以 public 访问等级比 open 要低一级,但其适用范围比 open 要广。

摘录来自: “大话Swift 4.0”。 iBooks.

internal:

“属性和方法只能在当前模块内部访问,也就是说只能被当前模块中的各个Swift源文件所访问。”

摘录来自: “大话Swift 4.0”。 iBooks.

fileprivate:

“fileprivate 访问等级能用于修饰的元素实体与 internal 一样,不过用 fileprivate 所修饰的元素实体只能在当前源文件作用域内可见。”

摘录来自: “大话Swift 4.0”。 iBooks.

private:

“private 访问等级一般用于修饰某个类型中的属性和方法,表示该属性或方法仅对当前类型或该类型的对象可见。由于 fileprivate 在Swift 3.0中才刚引入,所以为了兼容2.0版本,当 private 用在文件作用域中修饰某个对象、函数或类型时,其功能与 fileprivate 相当。

摘录来自: “大话Swift 4.0”。 iBooks.

2.访问等级的指导原则:

“一个实体的访问等级必须小于等于它所关联的实体中的最小访问等级。”

摘录来自: “大话Swift 4.0”。 iBooks.

3.元组的访问等级:

元组类型的访问等级是他所有元素中访问等级最低的那个等级。

4.枚举类型的访问等级:

“一个枚举类型的每个枚举值会默认具有该枚举类型所拥有的访问等级。我们不能对某一枚举值指定一个不同的访问等级。”

摘录来自: “大话Swift 4.0”。 iBooks.

5.类继承的访问等级:

“我们可以继承当前访问上下文中可被访问的任一个类。子类的访问等级不能高于其父类。

摘录来自: “大话Swift 4.0”。 iBooks.

6.属性getter与setter方法的访问等级:

“一个属性和下标的getter与setter方法的访问等级默认为该属性或下标自身所拥有的访问等级。不过我们可以通过 private(set)、fileprivate(set)、internal(set) 将属性或下标的写访问等级做降低处理,从而可以约束对这些属性或下标可修改的作用域。所以,对于只读属性和下标,我们就不能用这三种权限限定修饰符了。这三种修饰符一般放在 var 或 let 的前面,访问等级修饰符的后面。

摘录来自: “大话Swift 4.0”。 iBooks.

struct Test {
     
    /// 这里定义了一个internal访问等级的存储式实例属性a,
    /// 但是对a的写操作是private的。
    private(set) var a = 10
     
    /// 这里定义了一个public访问等级的存储式实例属性b,
    /// 但是对b的写操作是internal的。
    public internal(set) var b = 20
     
 }

7.初始化器的访问等级:

类中的required初始化器访问等级与类的访问等级保持一致,

当类访问等级是open时,required初始化器访问等级必须是public,

因为初始化器的最高访问等级只能是public。

8.协议相关的访问等级:

/// 这里定义了一个fileprivate的协议
fileprivate protocol MyProt {
     
    /// 这里的method的访问等级为fileprivate
    func method()
}
 
/// 我们定义了一个public的结构体类型MyStruct,
/// 同时将它遵循了协议MyProt
public struct MyStruct: MyProt {
     
    /// 这里method的访问等级不能是private,其他都可以
    internal func method() {
         
    }
}

9.扩展相关的访问等级:

定义就是定义的等级,否则则是默认的internal等级。

10.类型定义的访问等级:

“我们所定义的任一类型定义都作为一单独的类型,从而可以为它单独指定访问等级。但我们要指定一个类型定义的访问等级时,它不能高于定义它的原始类型的访问等级。”

摘录来自: “大话Swift 4.0”。 iBooks.

/// 我们以internal的访问等级定义了类MyClass
class MyClass {
     
}
 
/// 我们这里只能用internal、fileprivate或private来修饰MyType
fileprivate typealias MyType = MyClass

11.作用域:

“Swift编程语言包含了以下几种作用域:模块作用域、文件作用域、类型作用域以及函数、语句块作用域。

摘录来自: “大话Swift 4.0”。 iBooks.

最里层的语句块或函数所定义的实体会覆盖掉其外部所定义的同名实体。

 

转载于:https://www.cnblogs.com/pengsi/p/8520383.html

相关文章:

  • nginx代理PHP获取IP 的问题
  • git-命令使用
  • C#解析Json
  • Integer值判断是否相等问题
  • EntityFramework Core 2.0 Explicitly Compiled Query(显式编译查询)
  • C语言数组的概念
  • shell中获取当前目录
  • kali使用Fluxion钓鱼WiFi
  • python url中文转码
  • 【网摘】将图片地址直接 转为 base64
  • Git Submodule使用完整教程
  • linux 扩展根分区
  • ES6通过WeakMap解决内存泄漏问题
  • 【转载】Relief 特征选择算法简单介绍
  • mysql deadlock
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 2018一半小结一波
  • canvas绘制圆角头像
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • idea + plantuml 画流程图
  • IndexedDB
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Java应用性能调优
  • Laravel5.4 Queues队列学习
  • React系列之 Redux 架构模式
  • sessionStorage和localStorage
  • Spark RDD学习: aggregate函数
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 基于web的全景—— Pannellum小试
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端攻城师
  • 数据仓库的几种建模方法
  • 移动端唤起键盘时取消position:fixed定位
  • 再次简单明了总结flex布局,一看就懂...
  • k8s使用glusterfs实现动态持久化存储
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • Mac 上flink的安装与启动
  • # 数论-逆元
  • #每天一道面试题# 什么是MySQL的回表查询
  • $().each和$.each的区别
  • (02)vite环境变量配置
  • (Java数据结构)ArrayList
  • (ZT)出版业改革:该死的死,该生的生
  • (论文阅读30/100)Convolutional Pose Machines
  • (四)JPA - JQPL 实现增删改查
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .net6Api后台+uniapp导出Excel
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • /etc/sudoer文件配置简析
  • @html.ActionLink的几种参数格式
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [github配置] 远程访问仓库以及问题解决