首页 > 解决方案 > 你如何为不同的 iOS 版本提供不同的类声明?

问题描述

我的应用需要以 iOS 12 为目标,但在可用时使用 iOS 13 的功能(尤其是 Catalyst 的菜单)。

我已使用 @available 属性将我的 AppDelegate 标记为在 iOS 13+ 中可用;我想我将其视为此处另一篇文章的解决方案。但是我的应用程序在 iOS 12 上崩溃了,因为它仍然调用 iOS 12 中不可用的 iOS 13 函数(UIWindow 的 overrideUserInterfaceStyle)。这似乎是一个错误,但是......为什么应用程序甚至在 iOS 12 下启动,当我将其整个代理标记为仅 iOS 13+ 时?

为 iOS 13 之前的版本提供类的替代定义的正确方法是什么?如果我在同一个文件中创建另一个声明但用@available(iOS 12, *) 标记它,编译器会抱怨重复定义。

在此处输入图像描述

我可以用@available 而不是整个类来标记每个有问题的方法,但是当您遇到旧操作系统版本中不可用的类型的存储属性时,这会崩溃;编译器抱怨您不能通过将 @available 放在存储属性上来使存储的属性可能不存在。

标签: iosattributesversion

解决方案


推荐阅读