下标的使用和运算符重载

来源:互联网 发布:java基础笔试题 编辑:程序博客网 时间:2024/05/20 04:48
/** *  下标的使用 */struct Vector3{    var x:Double = 0.0    var y:Double = 0.0    var z:Double = 0.0    //设置下标    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            }        }    }}var v = Vector3(x: 1.0, y: 2.0, z: 3.0)v[0] = 100////////////////////////////////////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 = Array(count: col, repeatedValue: 0.0)            data.append(aRow)        }    }    subscript(x:Int,y:Int) -> Double{        get{            //断言            assert(x >= 0 && x < r && y >= 0 && y < c,"Index out of Range")            return data[x][y]        }    }}
//运算符的重载func + (left:Vector3,right:Vector3) -> Vector3{    return Vector3(x: left.x+right.x, y: left.y+right.y, z: left.z+right.z)}/** *  自定义运算符 */postfix operator +++{}//后置运算符,前置运算符prefixpostfix func +++(inout vector:Vector3) -> Vector3{    return Vector3(x: vector.x+1, y: vector.y+1, z: vector.z+1)}va+++//双目运算符,associativity结合性,precedence 优先级infix operator ^{associativity left precedence 140}func ^(left:Vector3,right:Vector3) -> Vector3{    return right}


0 0