下标

类,结构和枚举可以定义下标,它们是访问集合,列表或序列的成员元素的快捷方式。您可以使用下标以索引设置和检索值,而无需单独的设置和检索方法。例如,您可以将someArray [index]和Dictionary实例中的元素作为someDictionary [key]访问Array实例中的元素。

您可以为单个类型定义多个下标,并根据传递给下标的索引值的类型选择适当的下标超载。下标不限于单个维度,您可以使用多个输入参数定义下标以适应您的自定义类型的需求。

下标语法

下标使您能够通过在实例名称后面的方括号中写入一个或多个值来查询某个类型的实例。它们的语法类似于实例方法语法和计算属性语法。您可以使用subscript关键字编写下标定义,并以与实例方法相同的方式指定一个或多个输入参数和返回类型。与实例方法不同,下标可以是可读写或只读的。这种行为由getter和setter以与计算属性相同的方式传递:

subscript(index: Int) -> Int {

get {

// return an appropriate subscript value here

}

矩阵中的值可以通过将行和列值传递给下标来设置,并用逗号分隔:

matrix[0, 1] = 1.5

matrix[1, 0] = 3.2

这两个语句调用下标的设置器在矩阵的右上角位置(其中行为0且列为1)和位于左下角位置(其中行1和列为0)的位置设置值1.5:

swift协议扩展属性(Swift4.1官方文档大全)(1)

Matrix下标的getter和setter都包含一个断言,用于检查下标的行和列值是否有效。 为了协助这些断言,Matrix包含一个名为indexIsValid(row:column :)的便捷方法,它检查请求的行和列是否在矩阵的边界内:

func indexIsValid(row: Int, column: Int) -> Bool {

return row >= 0 && row < rows && column >= 0 && column < columns

}

如果您尝试访问矩阵范围之外的下标,则会触发断言:

let someValue = matrix[2, 2]

// this triggers an assert, because [2, 2] is outside of the matrix bounds

,