9

我在以下代码中收到Xcode 13的错误消息

@available(iOS 13.0, *)
    case windowScene(_: UIWindowScene, windowLevel: UIWindow.Level)

无法使用“@available”将具有关联值的枚举案例标记为可能不可用

有谁知道我为什么会收到这个错误以及纠正它的解决方案是什么?它在 Xcode 12 中运行良好。

4

4 回答 4

9

有关 Swift 编译器团队的解释和解决方法,请参阅这个 Swift 错误

这是故意的。具有潜在不可用有效负载的枚举案例的 ABI 没有明确定义。这在过去起作用的巧合是您的应用程序不需要(可能不可用的)有效负载类型元数据。请增加您的部署目标或将 Foo 本身标记为最不可用的情况。 https://github.com/apple/swift/pull/36327

因此,您要么需要将整个枚举标记为,@available(iOS 13.0, *)要么需要将部署目标增加到iOS 13.0.

于 2021-08-12T08:49:14.380 回答
4

当我使用 pod 'SwiftMessages' 显示弹出消息时,我收到了相同的消息。

我刚刚将 pod 'SwiftMessages' 替换为 pod 'SwiftMessages','~> 5.0'。

于 2021-11-04T13:06:40.600 回答
3

它在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. 但是,在不了解完整背景的情况下,可能很难找到解决方案。

于 2021-08-12T08:52:49.730 回答
1

只需更新您的 pod。我认为您正在使用一些对于 Xcode 13 已过时的 pod。例如,名为 SwiftMessages 的 pod 存在此类问题。之后,豆荚更新,这个问题为我解决了。我希望,它会帮助你。

于 2021-10-12T12:03:57.780 回答