《swift2.0 官方教程中文版》 第2章-12下标脚本


import Foundation


//用下标脚本访问一个数组(Array)实例中的元素可以这样写 so meArray[index],访问字典(Dictionary)实例中的元素可以这样写 someDictionary[key]


/*下标脚本语法******************************************************/

//下标脚本允许你通过在实例后面的方括号中传入一个或者多个的索引值来对实例进行访问和赋值

//subscript(index: Int) -> Int {

// get {

// // 返回与入参匹配的Int类型的值

// }

//

// set(newValue) {

// // 执行赋值操作返回与入参匹配的Int类型的值

// }

//}


//subscript(index: Int) -> Int {

// // 返回与入参匹配的Int类型的值

//}


struct TimesTable {

let multiplier: Int

subscript(index: Int) -> Int {

return multiplier * index

}

}

let threeTimesTable = TimesTable(multiplier: 3)

print("36倍是\(threeTimesTable[6])")

// 输出 "36倍是18"

//TimesTable 例子是基于一个固定的数学公式。它并不适合对 threeTimesTable[someIndex] 进行赋值操作,这也是为什么附属脚本只定义为只读的原因。




/*下标脚本用法******************************************************/

//根据使用场景不同下标脚本也具有不同的含义。通常下标脚本是用来访问集合(collection),列表(list)或序 (sequence)中元素的快捷方式。你可以在你自己特定的类或结构体中自由的实现下标脚本来提供合适的功能

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

numberOfLegs["bird"] = 2


//Swift 中字典的附属脚本实现中, get 部分返回值是 Int?,上例中的 numberOfLegs 字典通过附属脚本返 回的是一个 Int? 或者说可选的int”,不是每个字典的索引都能得到一个整型值,对于没有设过值的索引的访 问返回的结果就是 nil ;同样想要从字典实例中删除某个索引下的值也只需要给这个索引赋值为 nil 即可。

numberOfLegs["spider"] = nil

print(numberOfLegs)




/*下标脚本选项******************************************************/

//下标脚本允许任意数量的入参索引,并且每个入参类型也没有限制。下标脚本的返回值也可以是任何类型。下标 脚本可以使用变量参数和可变参数,但使用写入读出(in-out)参数或给参数设置认值都是不允许的。

struct Matrix {

let rows: Int,columns: Int

var grid: [Double]

init(rows: Int,columns: Int) {

self.rows = rows

self.columns = columns

grid = Array(count: rows * columns,repeatedValue: 0.0)

}

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

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

}

subscript(row: Int,column: Int) -> Double {

get {

assert(indexIsValidForRow(row,column: column),"Index out of range")

return grid[(row * columns) + column]

}

set {

assert(indexIsValidForRow(row,"Index out of range")

grid[(row * columns) + column] = newValue

}

}

}


var matrix = Matrix(rows: 2,columns: 2)

matrix[0,1] = 1.5

matrix[1,0] = 3.2


//let someValue = matrix[2,2]

// 断言将会触发,因为 [2,2] 已经超过了matrix的最大长度

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...