В 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
Эти определения различаются по типу параметра для recoveryHandler. Поэтому в 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 во время выполнения?
Спасибо за любую помощь!