排除赋值中的可变可变性
斯威夫特 5.0 - Xcode 10.2.1
我有一个带有我希望可变的属性的类,除了我不想让该属性直接分配给=
运算符。举个例子:
class Foo {
var counter = Counter()
init() { }
}
struct Counter {
private(set) var n = 0
let interval: Int
mutating func increment() {
n += interval
}
init(by interval: Int = 1) {
self.interval = interval
}
}
我想被允许的:
let foo = Foo()
foo.counter.increment()
我不想被允许的:
let fasterCounter = Counter(by: 10)
let foo = Foo()
foo.counter = fasterCounter
注意:
虽然我知道我可以创建counter
一个private(set) var
并创建一个incrementCounter()
函数Foo
来增加它,但我希望能够直接通过counter
变量访问变异方法,因为它会使类变得混乱,并且对于类型来说很烦人许多变异方法。同样,我知道我也可以创建counter
一个常量和Counter
一个类,但我需要属性的值类型语义。