2

我目前正在构建一个带有 watchOS 应用扩展的 iOS 应用。我有两个应用程序之间共享的某些类,它们在两个平台上基本相同,但有某些变化。我想知道如何最好地实施。现在我使用以下内容:

#if os(watchOS)
private var watchOSOnlyProperty: Any?
#endif

或者

#if os(iOS)
func iOSOnlyMethod() {
    ...
}
#endif

虽然这可行,但它带来了几个问题,因为 XCode 似乎对此感到很困惑。使用这种语法时,缩进、自动完成和方法列表都有点偏离。

这样做的正确方法是什么?如何将 iOS/watchOS 特定的属性和方法添加到 Swift 中的共享类?

4

2 回答 2

1

代码分离

代码分离有两种方式

  • #if os(...)像你建议的那样使用。
  • 为不同的目标使用单独的文件。

自动完成

Xcode 只会为您当前选择的目标自动完成代码。 Xcode 目标选择器

如果您想自动完成#if os(watchOS)块内的代码,则需要将当前目标(通过工具栏)更改为 wathOS 目标。

于 2017-08-08T09:14:20.983 回答
0

您可以在 Watch 应用程序目标的 Build Settings 中添加 C 预处理器标志。

-DWATCHOS

然后

#ifdef WATCHOS
// watchOS code here
#else
// iOS code here
#endif

将工作。

于 2017-12-15T04:20:38.017 回答