在 iOS 12 中,UIApplicationDelegate 协议定义:
- (BOOL) application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
而在以前的 iOS 版本中,这是定义的:
- (BOOL) application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler
这些定义在 restoreHandler 的参数类型上有所不同。因此,在 Xcode 10 中,我们现在收到警告:
'application:continueUserActivity:restorationHandler:' 实现中的参数类型冲突:'void (^ _Nonnull __strong)(NSArray> * _Nullable __strong)' vs 'void (^__strong _Nonnull)(NSArray *__strong)'
我仍在处理可能在 iOS 12 之前发布的更新,但我也在为支持 iOS 12 奠定基础。我不确定如何处理跨多个 iOS 版本的不同参数类型。
通常在一个方法中,我会使用 @available 之类的东西来根据运行时检测到的 iOS 版本来分支代码,但在这种情况下,我不知道最佳实践是什么。我当然不想为此大惊小怪!我是否应该避免更改任何内容并接受警告,直到 Xcode 10 结束测试版并且我正在提交 iOS 12?那么它会在运行时向后兼容较小的 iOS 版本吗?
感谢您的任何帮助!