diff --git a/source/chapter2/12_Subscripts.md b/source/chapter2/12_Subscripts.md index 7fa1faed..c569c0db 100644 --- a/source/chapter2/12_Subscripts.md +++ b/source/chapter2/12_Subscripts.md @@ -1,3 +1,36 @@ # 下标 (Subscripts) -类(Class)、结构体(structures)和枚举(enumerations)都可以定义下标,可以认为是访问对象、集合或序列的快捷方式。举例来说,用下标访问一个数组(Array)实例中的元素可以这样写 `someArray[index]` ,访问字典(Dictionary)实例中的元素可以这样写 `someDictionary[key]`,而不需要再调用实例的某个方法来获得元素的值。 \ No newline at end of file +下标可以定义在类(Class)、结构体(structures)和枚举(enumerations)这些目标中,可以认为是访问对象、集合或序列的快捷方式。举例来说,用下标访问一个数组(Array)实例中的元素可以这样写 `someArray[index]` ,访问字典(Dictionary)实例中的元素可以这样写 `someDictionary[key]`,而不需要再调用实例的某个方法来获得元素的值。 + +对于同一个目标可以定义多个下标,通过索引值类型的不同来进行重载,而且索引值的个数可以超过一个。 + +> 译者:这里下标重载在本小节中原文并没有任何演示 + +## 下标语法 + +下标允许你通过在实例后面的方括号中传入一个或者多个的索引值来对实例进行访问和赋值。语法类似于实例方法和实例属性的混合。与定义实例方法类似,定义下标使用`subscript`关键字,显式声明入参(一个或多个)和返回类型。与实例方法不同的是下标可以设定为读写或只读。这种方式又有点像实例属性的getter和setter: + +``` +subscript(index: Int) -> Int { + get { + // 返回与入参匹配的Int类型的值 + } + + set(newValue) { + // 执行赋值操作 + } +} +``` + +`newValue`的类型必须和下标定义的返回类型相同。与实例属性相同的是set的入参声明`newValue`就算不写,在set代码块中依然可以使用`newValue`这个变量来访问新赋的值。 + +与只读实例属性一样,可以直接将原本应该写在get代码块中的代码写在subscript中即可: + +``` +subscript(index: Int) -> Int { + // 返回与入参匹配的Int类型的值 +} +``` + +> 译者:这里有个词Computed Properties 这里统一翻译为实例属性了 微软术语引擎里没有这个词 +