diff --git a/source/chapter2/01_The_Basics.md b/source/chapter2/01_The_Basics.md index ed981656..6fc825d3 100755 --- a/source/chapter2/01_The_Basics.md +++ b/source/chapter2/01_The_Basics.md @@ -481,7 +481,7 @@ print("The status message is \(http200Status.description)") > 注意 > -> 元组在临时组织值的时候很有用,但是并不适合创建复杂的数据结构。如果你的数据结构并不是临时使用,请使用类或者结构体而不是元组。请参考 [类和结构体](./09_Classes_and_Structures.md)。 +> 当遇到一些相关值的简单分组时,元组是很有用的。元组不适合用来创建复杂的数据结构。如果你的数据结构可能是错综复杂的,请把你的数据结构用类或者结构体去建模,而不是使用元组。欲获得更多信息,请参考 [结构体和类](https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html)。 ## 可选类型 {#optionals} diff --git a/source/chapter2/12_Subscripts.md b/source/chapter2/12_Subscripts.md index c5aa4c0d..f7ddefb0 100755 --- a/source/chapter2/12_Subscripts.md +++ b/source/chapter2/12_Subscripts.md @@ -72,7 +72,7 @@ numberOfLegs["bird"] = 2 ## 下标选项 {#subscript-options} -下标可以接受任意数量的入参,并且这些入参可以是任意类型。下标的返回值也可以是任意类型。下标可以使用变量参数和可变参数,但不能使用输入输出参数,也不能给参数设置默认值。 +下标可以接受任意数量的入参,并且这些入参可以是任意类型。下标的返回值也可以是任意类型。下标可以使用可变参数,并且可以提供默认参数数值,但是不能使用输入输出参数。 一个类或结构体可以根据自身需要提供多个下标实现,使用下标时将通过入参的数量和类型进行区分,自动匹配合适的下标,这就是*下标的重载*。 @@ -139,4 +139,19 @@ func indexIsValid(row: Int, column: Int) -> Bool { ```swift let someValue = matrix[2, 2] // 断言将会触发,因为 [2, 2] 已经超过了 matrix 的范围 -``` +``` + +## 类型下标{#type-subscripts} +正如上节所述,实例下标是在特定类型的一个实例上调用的下标。你也可以定义一种在这个类型本身上调用的下标。这种下标的类型被称作类型下标。你可以通过在 subscript 关键词之前写下 static 关键字的方式来表示一个类型下标。类可以使用 class 关键字来允许子类重写父类中对那个下标的实现。以下的例子表明你应怎样定义和调用一个类型下标: + +``` +enum Planet: Int { + case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune + static subscript(n: Int) -> Planet { + return Planet(rawValue: n)! + } +} +let mars = Planet[4] +print(mars) +``` +