iOS Developer

swift中的下标

2017-12-18  本文已影响196人  hello_bear

类、结构体和枚举可以定义下标,它可以作为访问集合、列表或序列成员元素的快捷方式。你可使用下标通过索 引值来设置或检索值而不需要为设置和检索分别使用实例方法。比如说,用 someArray[index] 来访问 Array 实例 中的元素以及用 someDictionary[key] 访问 Dictionary 实例中的元素。

你可以为一个类型定义多个下标,并且下标会基于传入的索引值的类型选择合适的下标重载使用。下标没有限制 单个维度,你可以使用多个输入形参来定义下标以满足自定义类型的需求。

一、下标的语法

使用关键字 **subscript **来定义下标,并且指定一个或多个输入形式参数和返回类型,与实例方法一样。
与实例方法不同的是,下标可以是读写也可以是只读的。这个行为通过与计算属性中相同的 getter和setter传达:

1  subscript(index:Int) -> Int {
2      get{
3          //return an appropriate subscript value here
4      }
5      set(newValue){
6          //perform a suitable setting action here
7      }
8  }

下面是一个只读下标实现的栗子,它定义了一个 TimeTable 结构体来表示整数的n倍表:

1  struct TimesTable {
2      let multiplier: Int
3      subscript(index: Int) -> Int {
4          return multiplier * index
5      } 
6  }
7 let threeTimesTable = TimesTable(multiplier: 3)
8 print("six times three is \(threeTimesTable[6])")
9 // prints "six times three is 18"

在这个栗子中,创建了一个 TimeTable 的新实例来表示三倍表。它表示通过给结构体的 initializer 转入值 3 来作为 用于实例的 multiplier 形式参数。

二、下标用法

“下标”确切的意思取决于它使用的上下文。通常下标是用来访问集合、列表或序列中元素的快捷方式。你可以在 你自己特定的类或结构体中自由实现下标来提供合适的功能。

例如,Swift 的 Dictionary 类型实现了下标来对 Dictionary 实例中存放的值进行设置和读取操作。你可以在下标的 方括号中通过提供字典键类型相同的键来设置字典里的值,并且把一个与字典值类型相同的值赋给这个下标:

1 var numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
2 numberOfLegs["bird"] = 2

三、下标选项

下标可以接收任意数量的输入形式参数,并且这些输入形式参数可以是任意类型。下标也可以返回任意类型

下标可以使用变量形式参数和可变形式参数,但是不能使用输入输出形式参数或提供默认形式参数值。

类或结构体可以根据自身需要提供多个下标实现,合适被使用的下标会基于值类型或者使用下标时下标方括号里 包含的值来推断。这个对多下标的定义就是所谓的下标重载。

上一篇 下一篇

猜你喜欢

热点阅读