ios - 如何覆盖目标平台中不可用但在 Base SDK 中可用的方法
问题描述
我正在尝试添加对新 iOS 设备的支持,同时保持与旧设备的兼容性。使用 Xcode 11.1,我将目标 iOS 平台设置为 9.3,一般 -> 部署信息 -> 目标。
在 Build Settings 中,Base SDK 只是说 iOS,所以我假设它始终是 Xcode 支持的最新版本。
我试图让 Home Indicator 在 iPhoneX 和 11 中消失,但为此你必须重写此方法,
override func prefersHomeIndicatorAutoHidden() -> Bool
{
return true
}
但是,我收到此构建错误:
Method does not override any method from its superclass
我尝试使用这样的@available
语法,
@available(iOS 11.0, *)
override func prefersHomeIndicatorAutoHidden() -> Bool
{
return true
}
但我得到了同样的构建错误。如果我检查该方法的快速帮助,它并不指向 Apple 的文档,而在另一个目标设置为 iOS 11 的游戏中,快速帮助确实指向正确的位置。
我不想将目标更改为较新的目标,因为这会破坏与旧手机的兼容性。这是硬编码Base SDK还是什么的问题?
编辑:
我接受第一个答案是有效的,但我想我会写下一些澄清,以防其他人陷入类似的困境:
- 如果您已将项目更新到最新的 Swift,则默认情况下 Base SDK 应该是最新的。
- 如果你没有,你的旧代码仍然可以编译。这就是为什么
func prefersHomeIndicatorAutoHidden()
仍然可以在我的其他项目中使用的原因,因为它曾经是一个函数(https://stackoverflow.com/a/52387441/1765629)并且我还没有将该项目更新到 Swift 5。 @available
以上与部署目标无关,因此在这种情况下我什至不需要。我假设该值将在较旧的 iOS 目标中被忽略。
解决方案
正如@Starsky 指出的那样,
@available(iOS 11.0, *)
override var prefersHomeIndicatorAutoHidden: Bool {
return true
}
推荐阅读
- php - 如何根据在 Wordpress 上使用的登录名将按钮重定向到不同的页面
- oracle - Oracle 存储过程将行集作为输出参数返回
- python - Python/Flask - “TypeError”类型的对象不是 JSON 可序列化的
- java - Java 中如何处理静态最终成员和静态成员?
- node.js - Express.js - 检查用户是否已经关注并显示取消关注按钮
- sql-server - 查询结果到 xlsx 并在 SQL Server 中发送邮件
- python - ZeroDivisionError:浮点除以零 - Python
- excel - 嵌套循环运行超慢
- rust - 如何正确引用相同的代码作为依赖项的依赖项?
- microsoft-graph-sdks - 是否有一种方法可以使用域等接口序列化一些 Microsoft Graph 实体