gpt4 book ai didi

iOS:在#define 中检查系统版本并做不同的事情,编译器错误

转载 作者:行者123 更新时间:2023-12-01 18:23:06 25 4
gpt4 key购买 nike

我正在使用 MKReverseGeocoder对于 iOS < 5 和 CLGeocoder对于 iOS >= 5,但收到警告,因为 MKReverseGeocoder已弃用,然后我尝试执行以下操作:

#define SYSTEM_LOWER_THAN_5 ([[[UIDevice currentDevice] systemVersion] compare:@"5.0" options:NSNumericSearch] == NSOrderedAscending)

#if SYSTEM_LOWER_THAN_5
@interface TelstraLocationService () <MKReverseGeocoderDelegate>
#else
@interface TelstraLocationService ()
#endif

但我得到一个错误:

Invalid token at start of a preprocessor expression



这是由只能在运行时评估的宏引起的。有没有办法摆脱警告(不改变部署目标)?

最佳答案

如果您的目标是简单地摆脱编译器警告(因为您已经考虑了任何潜在问题并明确决定忽略它),请使用以下编译器指令包围触发代码:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
// some code that uses something deprecated
#pragma clang diagnostic pop

您希望尽可能具体,以避免无意中忽略其他有效的弃用警告。仅环绕 MKReverseGeocoderDelegate如果您在它之前和之后有另一个协议(protocol),否则只需围绕整个 @interface block :
// option 1
@interface TelstraLocationService () <
SomeProtocol

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
MKReverseGeocoderDelegate
#pragma clang diagnostic pop

AnotherProtocol>

// option 2
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"

@interface TelstraLocationService () <MKReverseGeocoderDelegate>

#pragma clang diagnostic pop

将任何来电转至 reverseGeocoder:didFindPlacemark:reverseGeocoder:didFailWithError:使用相同的编译器指令来消除它们的弃用警告。

关于iOS:在#define 中检查系统版本并做不同的事情,编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16027404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com