При использовании Xcode 9 есть некоторые предупреждения компилятора This function declaration is not a prototype
. Предлагается добавить void
в тело метода, которое разрешит его. Проблема, с которой я столкнулся, заключается в том, что эти предупреждения также выдаются для системных API, таких как UIApplication
методы делегата:
- (void)application:(UIApplication *)application
handleActionWithIdentifier:(NSString *)identifier
forRemoteNotification:(NSDictionary *)userInfo
withResponseInfo:(NSDictionary *)responseInfo
completionHandler:(void (^)())completionHandler
Это можно решить следующим образом:
- (void)application:(UIApplication *)application
handleActionWithIdentifier:(NSString *)identifier
forRemoteNotification:(NSDictionary *)userInfo
withResponseInfo:(NSDictionary *)responseInfo
completionHandler:(void (^)(void))completionHandler
Теперь мне интересно, будут ли методы делегирования работать в долгосрочной перспективе или Apple добавит их void
в более поздние бета-версии iOS 11. Мне любопытно, потому что, если я включу void
тело, Xcode будет жаловаться на несоответствие селекторов методов (что имеет смысл). У кого-нибудь возникла такая же проблема?
источник
void (^)()
orvoid (*)()
void(^)()
), явно включаютvoid
в скобках:void(^)(void)
.