下标的使用和运算符重载

/**
 *  下标的使用
 */
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 +++{}//后置运算符,前置运算符prefix
postfix 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
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值