保持变量或对象属性相同的最佳方法是什么,但如果不存在,则设置默认值。
我目前做的是:
optionalVar = optionalVar ?? defaultValue
但是,有时,我会收到如下错误:
Thread 1: Simultaneous accesses to 0x103a854b8, but modification requires exclusive access
有时我不这样做,所以我认为这不是最好的方法。
最佳答案
输入类似的声明:
x = x ?? y
将始终导致分配,您将重新分配相同的值或分配新值 y。正如您在尝试在多个线程上执行此操作时所经历的那样,有时会有多个线程同时访问该变量。
您可能希望使用较长的逻辑形式:
if optionalVar == nil {
optionalVal = default
}
不太漂亮,但如果该值已经定义,则不会重新分配。或者,您可以使用 Mutex/NSLock 来确保一次只有一个线程可以为此变量设置值。
关于swift - 仅当变量的当前值非 nil 时才更改 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51814291/