美文网首页
protocol的方法是否要声明为mutating

protocol的方法是否要声明为mutating

作者: 言己言 | 来源:发表于2017-11-03 09:36 被阅读0次

    swift的protocol可以被class,struct,enum类型实现,如果没在协议的方法里写mutating,例如mutating func method(),如果使用者用struct或enum实现这个协议,就不能在方法里改变自己的变量了。而mutating对于class类型来说没有影响,可以当做是透明的。

    protocol Vehicle
    {
        var numberOfWheels: Int {get}
        var color: UIColor {get set}
    
        mutating func changeColor()
    }
    
    struct MyCar: Vehicle {
        let numberOfWheels = 4
        var color = UIColor.blue
    
        mutating func changeColor() {
            // 因为 `color` 的类型是 `UIColor`,这里直接写 .red 就足以推断类型了
            color = .red
        }
    }
    

    如果把 protocol 定义中的 mutating 去掉的话,MyCar 就怎么都过不了编译了:保持现有代码不变的话,会报错说没有实现协议;如果去掉 mutating 的话,会报错说不能改变结构体成员。

    相关文章

      网友评论

          本文标题:protocol的方法是否要声明为mutating

          本文链接:https://www.haomeiwen.com/subject/lqwzpxtx.html