美文网首页Swift 基础
关键字 nonmutating

关键字 nonmutating

作者: 幸运者_Lucky | 来源:发表于2019-09-26 15:04 被阅读0次

    作用是什么?
    简单的说, 类无论标记为 let 还是 var, 只要它的属性是 var, 它的属性就是可以被修改的.
    结构体与类有很大的不同, 一个不可变结构体对象, 没有特殊处理的情况下, 它的属性无论被标记为 let 还是 var 都不可以被修改.
    下面就说一下特殊情况:
    以下都是关于结构体说明的.
    nonmutating 关键字, 表示在关键字修饰的方法中, 不会修改当前结构体的属性值,
    结构体中的方法默认是 nonmutating, 结构体对象的 set 方法默认是 mutating 修饰, 因为 set 方法就是用来赋值的, 这很好理解.
    如下代码实现, 一个 letTest 的结构体对象, 就可以进行 let t = Test() t.aa = "????"

    struct Test {
        var aa: String {
            nonmutating set {  }
            get { "aa" }
        }
    }
    

    针对不可变结构体 let:
    在被 nonmutating 修饰的方法内, 不可以给属性赋值.
    如果这个属性的 setnonmutating 修饰, 则表示在这个 set 方法中, 不可以给属性赋值.
    如下:

    struct Test {
        var aa: String {
            nonmutating set {
                print(newValue)
                aaa = newValue        // 报错误 Cannot assign to property: 'self' is immutable
            }
            get { "aa" }
        }
        
        var aaa: String?
    }
    

    如果set 没被 nonmutating 修饰则

    struct Test {
        var aa: String {
            set {
                print(newValue)
            }
            get { "aa" }
        }
    }
    let a = Test()
    a.aa = "asdf"   // 报错误  Cannot assign to property: 'a' is a 'let' constant
    

    相关文章

      网友评论

        本文标题:关键字 nonmutating

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