在我的MotionManager包装器类中,我有一个代码片段,它为每个函数重复。此代码可以使应用程序在模拟器上运行,而无需在设备中使用陀螺仪。我正在使用的代码片段如下所示:
#if !TARGET_IPHONE_SIMULATOR && TARGET_OS_IPHONE
return // Do nothing if in simulator
#endif
我想用一行代码替换这段代码,明确说明它的作用,并不是那么难看。如果我用C ++编写这个,我会简单地使用看起来像这样的宏:
#define skipIfSimulator #if !TARGET_IPHONE_SIMULATOR && TARGET_OS_IPHONE /
return /
#endif
所以不要这样:
func foo() {
#if !TARGET_IPHONE_SIMULATOR && TARGET_OS_IPHONE
return // Do nothing if in simulator
#endif
...
}
会有这样的:
func foo() {
skipIfSimulator
...
}
实现这一目标的最佳方法是什么,同时最好不添加开销?
答案 0 :(得分:0)
我想出了一个非常糟糕的解决方案。但它可以满足您的需求。
#if !TARGET_IPHONE_SIMULATOR && TARGET_OS_IPHONE
BOOL const kIsSimulator = NO;
#else
BOOL const kIsSimulator = YES;
#endif
#define SIM(x) if (kIsSimulator) {x; return;}
用法:
SIM(`any_statement`);
使用示例:
SIM(NSLog(@"on Simulator"));
or,
SIM(); // No statement at all
自包含示例: Objective-C
#import "ViewController.h"
#if !TARGET_IPHONE_SIMULATOR && TARGET_OS_IPHONE
BOOL const kIsSimulator = NO;
#else
BOOL const kIsSimulator = YES;
#endif
#define SIM(x) if (kIsSimulator) {x; return;}
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[self printAMessage];
}
- (void)printAMessage {
SIM(NSLog(@"on Simulator"));
NSLog(@"on iPhone");
}
@end
不幸的是, Swift 无法重现。