在OS X(Objective-C)和iOS(Swift)之间共享代码
我有一个用Objective-C编写的Mac应用程序。现在我想制作一个iOS版,用Swift编写 我从一开始就遵循MVC模式 我想在两个平台上共享模型代码。现在我遇到了一个我无法解决的问题。在Objective-C模型类中,我使用iOS上不存在的在OS X(Objective-C)和iOS(Swift)之间共享代码,ios,objective-c,macos,cocoa,swift,Ios,Objective C,Macos,Cocoa,Swift,我有一个用Objective-C编写的Mac应用程序。现在我想制作一个iOS版,用Swift编写 我从一开始就遵循MVC模式 我想在两个平台上共享模型代码。现在我遇到了一个我无法解决的问题。在Objective-C模型类中,我使用iOS上不存在的NSFont。使用UIFont会给我一个未知的错误UIKit在那里不可用 我需要做什么才能在一个类中使用AppKit和UIKit 我在这里做了些什么: #if TARGET_OS_IPHONE UIFont* font; #else NSFont* f
NSFont
。使用UIFont
会给我一个未知的错误<代码>UIKit在那里不可用
我需要做什么才能在一个类中使用AppKit
和UIKit
我在这里做了些什么:
#if TARGET_OS_IPHONE
UIFont* font;
#else
NSFont* font;
#endif
谢谢你的帮助 简短的回答:你不能。您需要编写使用iOS UIKit和Mac OS AppKit的有条件编译代码。浏览WWDC视频。在一个视频中,苹果的工程师们解释了他们做了什么,使MacOS和iOS之间的页面和数字代码尽可能多。这会给你一些想法 如果您在Objective-C中拥有庞大的代码库,那么我认为将其更改为Swift不会带来任何直接的好处 对于希望成员为NSFont或UIFont的情况,您的方法根本不起作用。在头文件中的某个地方更容易找到
#if TARGET_OS_IPHONE
typedef UIFont MyFont;
#else
typedef NSFont MyFont;
#endif
为了避免代码中除了ifdef之外什么都没有 我想我知道你的意思,我做到了。我编辑了我的问题来展示一个例子。该代码给了我以下错误:使用未声明的标识符“UIFont”,这是因为您需要不同的头文件。非常感谢您为我指明了正确的方向!我今天已经看了视频,并重新检查了它。我也查看了Lister示例代码,现在它可以工作了!