我阅读了很多有关为这两个系统创建跨平台库的问题。每个答案都指向静态库作为解决方案。
我不想以静态库结束,我想创建一个类,其中包含适用于 iOS 的方法及其对应的 OS X。
-(void)createColor:(NSColor*);
-(void)createColor:(UIColor*);
我遇到的第一个问题是我找不到一种方法来使用仅在特定系统中可用的类。因此,例如,我如何管理一个在 iOS 中与 UIColor
一起工作而在 OS X 中与 NSColor
一起工作的函数?
如果我为 iOS 创建一个项目,当我查看 Foundation.h
时,我无法在 header 列表中找到 NSColor.h
。
我想使用 TARGET_OS_MAC
和 TARGET_OS_IPHONE
定义来区分这两个系统...我做对了吗?
编辑以添加更多信息:
目前我有 2 个目标:iOSTestApp 和 OSxTestApp。对于这些目标,我根据系统包含了所需的框架。
使用 TARGET_OS_MAC
和 TARGET_OS_IPHONE
仅当我选择 OSXTestApp 作为事件目标时才有效。当我选择 iOSAppTest 时,Xcode 返回 OS X 数据类型的错误(即 NSColor
)
这里是产生这些错误的代码示例:
#if TARGET_OS_MAC
-(void)createColor:(NSColor*)color;
#elif TARGET_OS_IPHONE
-(void)createColor:(UIColor*)color;
#endif
虽然如果我反转定义它会起作用...... 下面是产生这些错误的代码示例:
#if TARGET_OS_IPHONE
-(void)createColor:(UIColor*)color;
#elif TARGET_OS_MAC
-(void)createColor:(NSColor*)color;
#endif
最佳答案
您看到的问题是因为 TARGET_OS_IPHONE
被定义为 TARGET_OS_MAC
的变体。 (换句话说,TARGET_OS_IPHONE
是 TARGET_OS_MAC
的更具体情况。或者 TARGET_OS_MAC
是一个矩形,如 TARGET_OS_IPHONE
是一个正方形)。
所以下面的代码在为 iOS 编译时会出错,因为 iOS 会匹配这两个条件,但是 NSColor
没有为 iOS 定义。
#if TARGET_OS_MAC
-(void)createColor:(NSColor*)color;
#elif TARGET_OS_IPHONE
-(void)createColor:(UIColor*)color;
#endif
以下代码对这两种情况都适用,因为对于 iOS,它匹配第一种情况,而对于 Mac OS X,它不匹配第一种情况但匹配第二种情况。
#if TARGET_OS_IPHONE
-(void)createColor:(UIColor*)color;
#elif TARGET_OS_MAC
-(void)createColor:(NSColor*)color;
#endif
关于ios - 创建 iOS/OS X 跨平台类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15323109/