美文网首页
protocol 中的 mutating

protocol 中的 mutating

作者: 小_黑_屋 | 来源:发表于2018-07-10 12:10 被阅读0次

Swift 类型分为两种:一种是 value type (值类型),另外一种是 reference type(引用类型)。

  • 值类型:例如 枚举、结构体、元祖
  • 引用类型: 例如 类(class)
在引用类型中,是可以直接在方法中去修改属性值的(当然前提是你的属性不是用 let 修饰的),如:
class Ninja {
    var name : String = "鸣人"

    func growUp() {
        self.name = "第七代火影"
    }
}
但是在值类型中,如果想要修改属性值,那么就需要在方法前面去添加 mutating 关键字(如果不添加,就会报错 Cannot assign to property: 'self' is immutable ),如:
struct Ninja {
    var name: String = "鸣人"
    
    mutating func growUp() {
        self.name = "第七代火影"
    }
}


需要注意的是,协议( protocol )不仅可以被 class 实现,也同样可以被 struct 和 enum 来实现,所以在定义协议的时候,需要考虑方法是否可能去修改属性,然后决定协议方法是否添加 mutating 关键字,让自己的设计更加合理。
protocol Ninja {
    var name: String {get}
    mutating func growUp()
}


struct MingRen: Ninja {
    var name: String = "鸣人"
    mutating func growUp() {
        self.name = "第七代火影"
    }
}

相关文章

  • Swift 日积月累

    1.将protocol的方法申明为 mutating: mutating关键字用于修饰protocol中的方法 在...

  • protocol 中的 mutating

    Swift 类型分为两种:一种是 value type (值类型),另外一种是 reference type(引用...

  • mutating

    1.mutating的使用2.extension和protocol中的使用3.mutating的本质 mutati...

  • 12-协议

    协议(Protocol) 协议中的属性 static、class mutating init init、init?...

  • ios关键字的说明

    iOS 关键字说明 protocol,mutating, extension, override protocol...

  • Swift小点(1)

    protocol protocol 的方法声明为mutating,是为了防止struct 或者 enum 实现协议...

  • 435,Swift - mutating关键字的使用(面试点:在

    Swift中mutating关键字 Swift中protocol的功能比OC中强大很多,不仅能再class中实现,...

  • swift 4.0 泛型

    泛型 Swift中mutating关键字 Swift中protocol的功能比OC中强大很多,不仅能再class中...

  • 【Swift 3 && C++11】<第一

    |Swift|C++:-:|:-:|:-:用到的部分关键字|protocol,mutating, extensio...

  • Swift中protocol

    1、将protocol的方法声明为mutating2、Protocol Extension3、可选接口和接口扩展4...

网友评论

      本文标题:protocol 中的 mutating

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