SafeGlobal

一个宏,用于在 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 论坛中的相关主题