Files
the-swift-programming-langu…/source/chapter2/12_Subscripts.md
2014-06-08 00:51:35 +08:00

37 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 下标 (Subscripts)
下标可以定义在类(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 这里统一翻译为实例属性了 微软术语引擎里没有这个词