Swift下标
Swift下标参考:
下标定义下标: subscript(parameterList) -> ReturnType {
get {
// return someValue of ReturnType
}
set (newValue) {
// set someValue of ReturnType to newValue
}
}
基础对于数组,可以通过下标来获取到数组的元素,如 var arr = [0,1,2,3] arr[1]
同理对于字典也是一样的,只是要通过key来获取键对应的值 除此之外,在Swift中还可以为自己创建的任何类型,如枚举、结构体、类创建下标 如下一个结构体 struct Vector3{
var x: Double = 0.0
var y: Double = 0.0
var z: Double = 0.0
}
var v = Vector3(x: 1.0,y: 2.0,z: 3.0)
对于结构体,我们可以通过 要引入 subscript(index: Int) -> Double?{
switch index{
case 0: return x
case 1: return y
case 2: return z
default: return nil
}
}
这样实现之后,就可以通过 在一个枚举、类中可以有多个下标的方法。如下,通过字符串来访问 subscript(axis: String) -> Double?{
switch axis{
case "x","X": return x
case "y","Y": return y
case "z","Z": return z
default: return nil
}
}
此时就可以通过 现在我们只是通过下标来读取数据,那怎样通过下标来改变数值呢? 计算属性有 subscript(index: Int) -> Double?{
get{
switch index{
case 0: return x
case 1: return y
case 2: return z
default: return nil
}
}
set{
guard let newValue = newValue else { return }
switch index{
case 0: x = newValue
case 1: y = newValue
case 2: z = newValue
default: return
}
}
}
这里的 这样设置之后,就可以通过 多维下标上面讲的都是一个参数的下标,实际上swift语言支持有任意多个参数的下标 如下的一个结构体矩阵 struct Matrix{
var data: [[Double]]
let r:Int
let c:Int
init(row: Int,col: Int) {
self.r = row
self.c = col
data = [[Double]]()
for _ in 0..<r {
let aRow = [Double](repeating: 0.0,count: col)
data.append(aRow)
}
}
}
如下的初始化方法,创建 var m = Matrix(row: 2,col: 2)
那如何通过下标来访问矩阵中的元素呢?同上面一样,也是使用 subscript(x:Int,y:Int)->Double{
assert(x>=0&&x<r&&y>=0&&y<c,"Index out of range")
return data[x][y]
}
这里使用了断言,因为数组越界会出错 上面的添加的只是获取元素的方法,现添加上 subscript(x:Int,y:Int)->Double{
get{
assert(x>=0&&x<r&&y>=0&&y<c,"Index out of range")
return data[x][y]
}
set{
assert(x>=0&&x<r&&y>=0&&y<c,"Index out of range")
data[x][y] = newValue
}
}
就可以通过 但是,通常一般是通过 subscript(row: Int)->[Double]{
get{
assert(row>=0&&row<r,"Index out of range")
return data[row]
}
set(vector){
assert(vector.count == c,"column number does not match")
data[row] = vector
}
}
此时,就可以通过 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |