Ios Swift:具有存储属性的枚举即使在使用串行队列进行变异时也不是线程安全的

Ios Swift:具有存储属性的枚举即使在使用串行队列进行变异时也不是线程安全的,ios,swift,xcode,multithreading,enums,Ios,Swift,Xcode,Multithreading,Enums,这个问题与苹果开发者论坛上报道的另一个问题有关,题为《4年前》。我看到与关联数据相关的生产崩溃,编译器添加的代码使用包含引用类型的关联数据取消初始化枚举 当我试图找出其他人是否也面临同样的问题时,我无意中发现了上面的帖子。我将该帖子中的示例简化为下面一个更简单的示例,并可靠地得到了由于访问错误而导致的崩溃。(我在操场上跑了这辆车,撞车了,但没有堆栈的痕迹) 导入基础 职业赛车手{ let queue=DispatchQueue(标签:“Racer-\(UUID())”) 变量值:字符串?=“”/

这个问题与苹果开发者论坛上报道的另一个问题有关,题为《4年前》。我看到与关联数据相关的生产崩溃,编译器添加的代码使用包含引用类型的关联数据取消初始化枚举

当我试图找出其他人是否也面临同样的问题时,我无意中发现了上面的帖子。我将该帖子中的示例简化为下面一个更简单的示例,并可靠地得到了由于访问错误而导致的崩溃。(我在操场上跑了这辆车,撞车了,但没有堆栈的痕迹)

<代码>导入基础 职业赛车手{ let queue=DispatchQueue(标签:“Racer-\(UUID())”) 变量值:字符串?=“”//减为可选的枚举 func race(){ 队列中的queue.async{[weak self] self?.value=UUID().uuiString } } } 让racer=racer() 虽然是真的{ 赛马 } 错误:执行被中断,原因:EXC\u访问错误(代码=1,地址=0x357d20cc94c0)


这是Swift中尚未修补的错误吗?

这里的具体问题是什么?@Itaferber我想知道这是否是Swift中的错误。让我把这一点补充到问题中。您还可以提供崩溃跟踪吗?一、 例如,无论是在调试版本还是发布版本中,都无法复制此内容。我在Playerd中运行了此功能,但没有得到stacktrace。很抱歉。让我补充一点,也就是
guard-Let-self=self-else{return}
可以防止这种崩溃。但我也看到过由于类似原因导致的生产代码崩溃。这是对同一问题的简单复制。我试图引起更多的注意,这似乎是关键问题
import Foundation
class Racer {
    let queue = DispatchQueue(label: "Racer-\(UUID())")
    var value: String? = "" // Desugars to Optional<String>, an enum
    func race() {
        queue.async {[weak self] in
            self?.value = UUID().uuidString
        }
    }
}
let racer = Racer()
while true {
    racer.race()
}