Swift中共享watchOS / iOS类的平台特定代码?

时间:2017-08-06 08:08:05

标签: ios swift watch-os code-sharing

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

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

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

虽然这有效,但由于XCode似乎对此非常困惑,因此它会产生一些问题。使用这种语法时,缩进,自动完成和方法列表都有点不对。

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

2 个答案:

答案 0 :(得分:0)

代码分离

分离代码有两种方法

  • 按照您的建议使用#if os(...)
  • 使用单独的文件 不同的目标。

自动完成

Xcode只会自动完成当前所选目标的代码。 Xcode target selector

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

答案 1 :(得分:0)

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

-DWATCHOS

然后

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

会奏效。