让对象和结构体如同数组和字典一样使用[ ]
的形式进行对象访问
import UIKit
class LearningViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var v3 = Vector3(x: 1, y: 2, z: 3)
//一般的访问形式是
print("\(v3.x) \(v3.y) \(v3.z)")
//现在我要和数组字典一样访问 array[0]
print("\(v3[0]) \(v3[1]) \(v3[2])")
print("\(v3["x"]) \(v3["y"]) \(v3["Z"])")
v3[0] = 100; print("\(v3[0])")
}
}
/// 三维向量的结构体
struct Vector3 {
var x: Double = 0.0
var y: Double = 0.0
var z: Double = 0.0
// 新的关键字 subscript 理解成一个特殊的函数, 后面的参数可以随意指定, 这里下标访问可读可写
subscript(index: Int) -> Double {
get{
switch index {
case 0: return x
case 1: return y
case 2: return z
default: fatalError("下标越界")
}
}
set{ //set 里面的 newValue 的类型和函数的返回值类型是一致的
switch index {
case 0: x = newValue
case 1: y = newValue
case 2: z = newValue
default: fatalError("下标越界")
}
}
}
// 这个下标访问只读
subscript(axis: String) -> Double {
switch axis {
case "x","X": return x
case "y","Y": return y
case "z","Z": return z
default: fatalError("非法下标")
}
}
}
网友评论