我在以下代码中收到Xcode 13的错误消息
@available(iOS 13.0, *)
case windowScene(_: UIWindowScene, windowLevel: UIWindow.Level)
无法使用“@available”将具有关联值的枚举案例标记为可能不可用
有谁知道我为什么会收到这个错误以及纠正它的解决方案是什么?它在 Xcode 12 中运行良好。
有关 Swift 编译器团队的解释和解决方法,请参阅这个 Swift 错误。
这是故意的。具有潜在不可用有效负载的枚举案例的 ABI 没有明确定义。这在过去起作用的巧合是您的应用程序不需要(可能不可用的)有效负载类型元数据。请增加您的部署目标或将 Foo 本身标记为最不可用的情况。 https://github.com/apple/swift/pull/36327
因此,您要么需要将整个枚举标记为,@available(iOS 13.0, *)
要么需要将部署目标增加到iOS 13.0
.
当我使用 pod 'SwiftMessages' 显示弹出消息时,我收到了相同的消息。
我刚刚将 pod 'SwiftMessages' 替换为 pod 'SwiftMessages','~> 5.0'。
它在Xcode 13 Beta 3的发行说明中列出,这是编译器中的一个错误导致这种情况发生。
这是一个节选:
编译器曾经错误地接受枚举案例上的 @available 注释,其关联值比部署目标新。(80238318)
例如:
@available(macOS 12, *)
public struct Crayon {}
public enum Pen {
case pencil
@available(macOS 12, *)
case crayon(Crayon)
}
虽然这在某些情况下有效,但 Swift 运行时无法执行通常所需的必要动态布局,因此这可能会导致运行时崩溃。编译器现在拒绝这种可用性比枚举案例上的部署目标更新。
因此,尽管您以前可以这样做,但现在不能这样做,因为编译器无法执行所需的检查。
您可以将整个枚举标记为@available
. 但是,在不了解完整背景的情况下,可能很难找到解决方案。
只需更新您的 pod。我认为您正在使用一些对于 Xcode 13 已过时的 pod。例如,名为 SwiftMessages 的 pod 存在此类问题。之后,豆荚更新,这个问题为我解决了。我希望,它会帮助你。