【问题标题】:Shimming in Swift在 Swift 中闪烁
【发布时间】:2014-06-25 08:18:47
【问题描述】:

根据 Apple 工程师 Elizabeth Reid 的说法,“填充”是指您使用条件编译在 iOS 和 OS X 之间重用代码。例如:

#if TARGET_OS_IPHONE
@import UIKit;
#define BaseView UIView
#else
@import AppKit;
#define BaseView NSView
#endif

@interface MyView : BaseView

@end

在 WWDC 2014 会议Sharing code between iOS and OS X 中,她还表示:

如果你从字面上翻译你将如何使用 Objective-C 填充,这个 不会在 Swift 中编译。

有一些方法可以在 Swift 中填充您的代码。

但它比你的基本条件编译更复杂 我们可以在 Objective-C 中使用。

那么,在 Swift 中“填充代码”的方法有哪些?

【问题讨论】:

  • 看看这个:developer.apple.com/library/prerelease/ios/documentation/Swift/…,尤其是条件编译语句。这可能是您的问题的答案。
  • @holex 来自同一文档:“与 C 预处理器中的条件编译语句相比,Swift 中的条件编译语句必须完全围绕自包含且语法有效的代码块。”重读后,我认为这就是里德所说的“更复杂”的意思。

标签: ios macos swift


【解决方案1】:

Swift 中看起来像这样:

#if os(iOS)
    import UIKit
    typealias BaseClass = UIView
    #else
    import AppKit
    typealias BaseClass = NSView
#endif

//

class MyClass : BaseClass {

    // ...

}

【讨论】:

  • 整洁。没想到typealias。不能让它在操场上工作,但稍后会在项目中尝试。
  • 我从来没有使用过游乐场,但在一个项目中,Xcode6 beta2 已经可以在我身边妥善处理它了。
猜你喜欢
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
相关资源
最近更新 更多