swift - 仅当变量的当前值非 nil 时才更改 Swift

标签 swift option-type

保持变量或对象属性相同的最佳方法是什么,但如果不存在,则设置默认值。

我目前做的是:

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/

相关文章:

swift - 强制解包选项和隐式解包选项之间的区别

ios - 是否可以向没有来源的现有枚举添加案例?

java - 使用 Optional.of() 有真正的理由吗?

ios - 我什么时候应该在我的模型中使用可选字符串?

iOS 和 Swift - 获取一个对象的屏幕位置以设置另一个对象的位置

swift !不删除 Optional()

java - 语句 lambda 可以替换为表达式 lambda

swift、numberOfRowsInSection 和 cellForRowAt 函数不返回值

swift - 将占位符添加到 UITextField,如何在 swift 中以编程方式设置占位符文本?

使用自定义单元格快速显示警报