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 =
/// 这里定义了一个public访问等级的存储式实例属性b,
/// 但是对b的写操作是internal的。
public internal(set) var b =
}
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.
最里层的语句块或函数所定义的实体会覆盖掉其外部所定义的同名实体。
Swift4.0复习访问控制与作用域的更多相关文章
- Swift4.0复习特性、编译标志和检查API的可用性
1.Swift中的特性: @引出,后面紧跟特性名,圆括号带参数即可. @attribute(args) avaiable: 指明对象,函数,类型的可用性. @available(iOS 10.0, m ...
- Swift4.0复习函数
1.函数的定义与调用: 一个函数定义的基本语法如以下代码所示: func function_name (param1: Int, param2: Float, param3: Double) -> ...
- Swift4.0复习Optional
1.Optional基本使用: 当我们声明一个Optional对象时,无论该对象是在文件作用域还是在函数体内作为局部对象声明,如果不对它初始化,那么它的值默认为空(nil). // 声明a为Int类型 ...
- Swift4.0复习控制流语句
1.do语句块: Swift编程语言中可使用 do 语句块作为类似C语言中的一般语句块进行使用.与C语言的语句块类似,Swift中的 do 语句块单独作为一个作用域,该语句块中声明的局部对象在其外部将 ...
- Swift4.0复习错误处理
1.Swift中错误的表示: “在Swift中如果我们要定义一个表示错误的类型非常简单,只需遵循 Error 协议即可.我们通常用枚举或结构体类型来表示错误类型,当然枚举可能用得更多些,因为它能更直观 ...
- Swift4.0复习扩展
1.扩展计算式属性: 2.对方法进行扩展: /// 定义枚举类型Light, /// 它指定了基本类型String enum Light: String { case red = "red& ...
- Swift4.0复习类型定义、类型投射等操作
1.类型定义: /// 这里将MyInt定义为Int32类型 typealias MyInt = Int32 /// 这里将MyArrayInt定义为[MyInt]数组类型 typealias M ...
- Swift4.0复习类
1.类的属性: 2.类的方法: 3.类作为引用类型: “Swift新增了一对操作符 === 与 !== 用于判定同一个类的两个对象引用是否指向同一对象实例.” 摘录来自: “大话Swift 4.0”. ...
- Swift4.0复习协议
1.协议的定义: /// 定义一个协议MyProt protocol MyProt { /// 声明了一个实例方法foo, /// 其类型为:() -> Void func foo() ...
随机推荐
- 多线程编程threading
操作系统能够调度和切换的最小单元实际上是线程.对于IO操作来说,多线程和多进程性能差别不大.有两种方法可以进行多线程编程. 1.使用多线程编程的两种方法 (1)直接实例化一个Thread对象 from ...
- 使用Default Trace查看谁还原了你的数据库?
select e.nameaseventclass,t.loginname,t.spid,t.starttime, t.textdata,t.objectid,t.objectname,t.datab ...
- Hadoop2.8 安装
一.下载Hadoop与java jdk-8u221-linux-x64.tar.gz Oracle官网下载 hadoop-2.8.5.tar.gz Hadoop官网下载 二.配置服务期间ssh免 ...
- 洛谷 P1257 平面上的最接近点对 题解
P1257 平面上的最接近点对 题目描述 给定平面上n个点,找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的. 输入格式 第一行:n:2≤n≤10000 接下来n行:每行两 ...
- 深入剖析mmu地址转化
mmu(内存管理单元),是arm区别于单片机的标志之一,虚拟地址转化分为3种,常见的如下2种. 段式转化如下,由表像中的基地址加偏移地址,(细页转化跟段式转化类似,多了一个2级页表,把虚拟地址0-20 ...
- setitimer()函数
定时器时间函数 struct itimerval: struct itimerval *new_value,其定义如下: struct itimerval { struct timeval it_in ...
- 重写Dijkstra
啊我沙雕了,竟然以为DJ的邻接矩阵不用初始化.. #include<bits/stdc++.h> #define R register int using namespace std; / ...
- C++2.0新特性(一)——<特性认知、__cplusplus宏开启、Variadic Templates 、左右值区分>
一.新特性介绍 2.0新特性包含了C++11和C++14的部分 1.2 启用测试c++11功能 C++ 标准特定版本的支持,/Zc:__cplusplus 编译器选项启用 __cplusplus 预处 ...
- StarUML自动生成Java代码
下载一个starUML 链接:https://pan.baidu.com/s/1pIGNVmhtwBxMrCG9LHdkCQ 提取码:c4i6 复制这段内容后打开百度网盘手机App,操作更方便哦 添加 ...
- 【CSP模拟赛】奇怪的队列(树状数组 &二分&贪心)
题目描述 nodgd的粉丝太多了,每天都会有很多人排队要签名. 今天有n个人排队,每个人的身高都是一个整数,且互不相同.很不巧,nodgd今天去忙别的事情去了,就只好让这些粉丝们明天再来.同时nod ...