【问题标题】:Sharing code between OS X (Objective-C) and iOS (Swift)在 OS X (Objective-C) 和 iOS (Swift) 之间共享代码
【发布时间】:2015-05-04 18:53:46
【问题描述】:

我有一个用 Objective-C 编写的 Mac 应用程序。现在我想制作它的 iOS 版本,用 Swift 编写。

我从一开始就遵循 MVC 模型。

我想在两个平台上共享模型代码。现在我遇到了一个我无法解决的问题。在一个 Objective-C 模型类中,我使用 NSFont,它在 iOS 上不存在。使用UIFont 会给我一个未知的错误。 UIKit 在那里不可用。

我需要做什么才能在一节课中使用AppKitUIKit

这是我所做的:

#if TARGET_OS_IPHONE
UIFont* font;
#else 
NSFont* font;
#endif

感谢您的帮助!

【问题讨论】:

    标签: ios objective-c macos cocoa swift


    【解决方案1】:

    浏览 WWDC 视频。在一段视频中,Apple 工程师解释了他们做了什么来获得 MacOS 和 iOS 之间常见的 Pages 和 Numbers 代码。那应该给你一些想法。

    如果您在 Objective-C 中拥有庞大的代码库,我认为将其更改为 Swift 并没有任何直接优势。

    对于您希望成员成为 NSFont 或 UIFont 的情况,您的方法根本不起作用。在头文件中的某个位置更容易

    #if TARGET_OS_IPHONE
    typedef UIFont MyFont;
    #else 
    typedef NSFont MyFont;
    #endif
    

    避免代码中只有 ifdefs。

    【讨论】:

    • 非常感谢您为我指明了正确的方向!我今天已经看过视频并重新检查了它。我也查看了 Lister 示例代码,现在它可以工作了!
    【解决方案2】:

    简短的回答:你不能。您需要编写条件编译代码,使用 iOS 的 UIKit 和 Mac OS 的 AppKit。

    【讨论】:

    • 我想我知道你的意思,我做到了。我编辑了我的问题以显示一个示例。该代码给了我以下错误:使用未声明的标识符'UIFont'
    • 那是因为你需要不同的头文件。
    猜你喜欢
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多