Как следует обрабатывать типы параметров метода протокола UIApplicationDelegate для конкретной версии iOS? - PullRequest
0 голосов
/ 27 августа 2018

В 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 во время выполнения?

Спасибо за любую помощь!

...