@@ -80,9 +80,9 @@ class SomeClass: SomeSuperclass, FirstProtocol, AnotherProtocol {
80
80
81
81
## 属性要求
82
82
83
- 协议可以要求遵循协议的类型提供特定名称和类型的实例属性或类型属性。协议不指定属性是存储属性还是计算属性,它只指定属性的名称和类型。此外,协议还指定属性是可读的还是可读 ** 写 ** 的。
83
+ 协议可以要求遵循协议的类型提供特定名称和类型的实例属性或类型属性。协议不指定属性是存储属性还是计算属性,它只指定属性的名称和类型。此外,协议还指定属性是可读的还是可 ** 读写 ** 的。
84
84
85
- 如果协议要求属性是可读可写的 ,那么该属性不能是常量属性或只读的计算属性。如果协议只要求属性是可读的,那么该属性不仅可以是可读的,如果你自己的代码需要的话,还可以是可写的。
85
+ 如果协议要求属性可读写 ,那么该属性不能是常量属性或只读的计算属性。如果协议只要求属性是可读的,那么该属性不仅可以是可读的,如果你自己的代码需要的话,还可以是可写的。
86
86
87
87
协议总是用 ` var ` 关键字来声明变量属性,在类型声明后加上 ` { set get } ` 来表示属性是可读可写的,可读属性则用 ` { get } ` 来表示:
88
88
@@ -503,7 +503,7 @@ class SomeClass: SomeProtocol {
503
503
```
504
504
-->
505
505
506
- 如果一个子类重写了父类的指定构造器,并且该构造器满足了某个协议的要求 ,那么该构造器的实现需要同时标注 ` required ` 和 ` override ` 修饰符:
506
+ 如果一个子类重写了父类的指定构造器,并且该构造器满足了某个协议的构造器要求 ,那么该构造器的实现需要同时标注 ` required ` 和 ` override ` 修饰符:
507
507
508
508
``` swift
509
509
protocol SomeProtocol {
@@ -641,7 +641,7 @@ class SomeSubClass: SomeSuperClass, SomeProtocol {
641
641
642
642
在代码中使用不透明类型时,可以与某个符合该协议的类型一起工作。底层类型在编译时是已知的,API 实现会选择该类型,但该类型的身份对 API 的使用方是隐藏的。使用不透明类型可以防止 API 的实现细节泄露到抽象层之外 —— 例如,通过隐藏函数的具体返回类型,并仅保证该值符合给定的协议。
643
643
644
- 代码使用装箱(boxed)的协议类型时,可以与任何在运行时选择的、符合该协议的类型一起工作。为了支持这种运行时的灵活性,Swift 在必要时会添加一个间接层 —— 称为 ** 箱子(box)** ,这会带来性能开销。由于这种灵活性,Swift 在编译时无法知道底层类型,这意味着你只能访问协议所要求的成员。要访问底层类型的任何其他 API,都需要在运行时进行强制转换 。
644
+ 代码使用装箱(boxed)的协议类型时,可以与任何在运行时选择的、符合该协议的类型一起工作。为了支持这种运行时的灵活性,Swift 在必要时会添加一个间接层 —— 称为 ** 箱子(box)** ,这会带来性能开销。由于这种灵活性,Swift 在编译时无法知道底层类型,这意味着你只能访问协议所要求的成员。要访问底层类型的任何其他 API,都需要在运行时进行类型转换 。
645
645
646
646
关于使用协议作为泛型约束的信息,参考 < doc:Generics > 。关于不透明类型和装箱协议类型的信息,参考 < doc:OpaqueTypes > 。
647
647
<!--
@@ -1422,9 +1422,9 @@ beginConcert(in: seattle)
1422
1422
1423
1423
将 ` birthdayPerson ` 传入 ` beginConcert(in:) ` 函数是不合法的,因为 ` Person ` 不是 ` Location ` 的子类。同理,如果你新建一个类继承于 ` Location ` ,但是没有遵循 ` Named ` 协议,用这个类的实例去调用 ` beginConcert(in:) ` 函数也是不合法的。
1424
1424
1425
- ## 检查协议一致性
1425
+ ## 检查是否遵循协议
1426
1426
1427
- 你可以使用 < doc:TypeCasting > 中描述的 ` is ` 和 ` as ` 操作符来检查协议一致性,即是否遵循某协议,并且可以转换到指定的协议类型 。检查和转换协议的语法与检查和转换类型是完全一样的:
1427
+ 你可以使用 < doc:TypeCasting > 中描述的 ` is ` 和 ` as ` 操作符来检查是否遵循某协议,并且可以类型转换到指定的协议 。检查和转换协议的语法与检查和转换类型是完全一样的:
1428
1428
1429
1429
- ` is ` 用来检查实例是否遵循某个协议,若遵循则返回 ` true ` ,否则返回 ` false ` 。
1430
1430
- ` as? ` 返回一个可选值,当实例遵循某个协议时,返回类型为协议类型的可选值,否则返回 ` nil ` 。
0 commit comments