Swift 下标

让对象和结构体如同数组和字典一样使用[ ]的形式进行对象访问

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("非法下标")
        }
    }
}

你可能感兴趣的:(Swift 下标)