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