我在以下代码中使用 Xcode 13 时遇到了错误消息。
@available(iOS 13.0, *)
case windowScene(_: UIWindowScene, windowLevel: UIWindow.Level)
枚举案例(enum cases)带有关联值(associated values)时,无法使用 '@available' 标记为“可能不可用”。
有人知道我为什么会收到这个错误消息,以及如何解决它吗?在 Xcode 12 中它还好好的。
请参考 Swift 编译团队在此处提供的解释和解决方案。
这是有意为之的。对于可能不可用的含有有效负载的枚举情况,ABI(应用二进制接口)未定义。过去这种情况能够工作是因为您的应用程序恰好没有要求有效负载的(可能不可用的)类型元数据而已。请将 Foo 标记为最少可用情况或增加部署目标版本。 https://github.com/apple/swift/pull/36327
因此,您需要将整个枚举标记为 @available(iOS 13.0, *)
,或将部署目标版本增加至 iOS 13.0
。
在Xcode 13 Beta 3的发布说明中,列出了编译器中发生这种情况的错误。
下面是摘录:
编译器曾错误地接受@available注释,用在带有较新关联值的枚举类型case上,而这些较新的关联值是超过部署目标范围的。(80238318)
例如:
@available(macOS 12, *)
public struct Crayon {}
public enum Pen {
case pencil
@available(macOS 12, *)
case crayon(Crayon)
}
只需更新您的Pods。我认为您正在使用一些已经过时的Pods,适用于Xcode 13。例如,名为SwiftMessages的Pod就有这种问题。在进行pod update之后,我解决了这个问题。 希望能够帮到您。
我通过注释掉语法@available(iOS 13.0, *)
来解决了错误Enum cases with associated values cannot be marked potentially unavailable with '@available'
。
错误是Swift Compiler Error
,在NowPlayingInfoProperty.swift
文件中有两个错误代码。
原始代码如下:
@available(iOS 13.0, *)
case serviceIdentifier(String?)
...
修改代码如下:
//@available(iOS 13.0, *)
case serviceIdentifier(String?)
...