如何在NSColor和UIColor之间自动选择正确的构建系统?(使用#define,或其他东西)

Ped*_*ira 8 cocoa objective-c uicolor nscolor c-preprocessor

我正在尝试创建一个NSObject子类,它将有很多返回颜色的方法,所以UIColor如果我正在构建iOS或者NSColor我正在为OS X构建,我想返回.
这是一种什么样的伪代码预期的行为应该是:

#define COLOR #if TARGET_OS_IPHONE UIColor #elif TARGET_OS_MAC NSColor #endif

+ (COLOR *)makeMeColorful;
Run Code Online (Sandbox Code Playgroud)

有可能做这样的事情,而不是为我的每个对象的方法(一个用于iOS,另一个用于OS X)制作两个方法吗?

Mic*_*lum 13

这绝对可行.例如,来自SpriteKit的SKColor定义如下:

#if TARGET_OS_IPHONE
#define SKColor UIColor
#else
#define SKColor NSColor
#endif
Run Code Online (Sandbox Code Playgroud)

然后像这样使用:

SKColor *color = [SKColor colorWithHue:0.5 saturation:1.0 brightness:1.0 alpha:1.0];
Run Code Online (Sandbox Code Playgroud)

这简单地利用了这一事实,UIColorNSColor分享了他们的一些类方法.

  • 这正是我想要的,谢谢你,先生! (2认同)

fpg*_*503 6

如果你正在使用Swift尝试的话

#if os(macOS)
    typealias Color = NSColor
#else
    typealias Color = UIColor
#endif
Run Code Online (Sandbox Code Playgroud)

适用于macOS,iOS,tvOS和watchOS.有关Swift预处理程序指令的更多信息.