一个宏,用于在 Swift 5.10 中拥有并发安全的全局变量(例如,枚举上的静态变量)。
在你的 Package.swift
文件中添加此包并信任它。
然后导入 SafeGlobal
并用 @SafeGlobal
前缀你的全局变量。 这是一个例子
import SafeGlobal
public enum Conf : Sendable {
@SafeGlobal public static var apiURL: URL = URL(string: "…")!
}
在 Swift 5.9 中,全局变量被(正确地)认为是非并发安全的。 一个常见的解决方法是创建一个属性包装器,它在全局变量的访问/修改周围添加一个锁。
这个解决方法很好也很容易实现,但在 Swift 5.10 中不再起作用。 原因与属性包装器的实现有关,但我没有完全掌握原因的复杂性,所以我不打算详细说明这一点。
无论如何,通过使用宏基本上重新实现属性包装器,我们再次摆脱了警告!
以下是 Swift 论坛中的相关主题