一、mutating

    mutating 关键字的作用是为了能在该方法中修改 struct 或是 enum 的变量,在类中实现协议方法不用写mutating关键字

protocol ExampleProtocol {
    var simpleDescription: String { get }
    mutating func adjust()
    mutating func newTest()
}

class SimpleClass: ExampleProtocol {
    var simpleDescription: String = "A very simple class."
    var anotherProperty: Int = 69105
    func adjust() {
        simpleDescription += "  Now 100% adjusted."
    }
    
    func newTest() {
        print("Jiacheng - SimpleClass -> ExampleProtocol -> newTest")
    }
}

    在枚举(enum)和机构体(struct)中遵守协议时,如果在实现方法中改变了自己的变量,则方法的声明和实现都需要加mutating关键字,否则会报错;如果没有改变变量,则不需要加mutating关键字。

二、Swift和OC中protocol的差异

    1. OC中的协议只能在类中实现,而Swift中的协议既可在类中实现,也可在枚举和机构体中实现;

    2. OC的协议方法有可选关键字,Swift没有,因此在Swift中想给协议方法添加可选关键字,则必须给protocol添加@obj关键字,声明这是个OC协议;

    3. 枚举和结构体无法实现添加@obj关键字的协议,该协议方法也无法添加mutating关键字。

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/narutoblog/p/14848718.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!