2017-08-06 85 views
1

我目前正在构建一个带有watchOS应用程序扩展的iOS应用程序。我有两个应用程序共享的某些类,它们在两个平台上基本相同,但有一些变化。我想知道如何最好地实施。现在,我使用以下命令:Swift中共享watchOS/iOS类的平台特定代码?

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

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

虽然这个工作,它给出了一些问题,因为的XCode似乎很困惑这个问题。使用这种语法时,缩进,自动完成和方法列表都有点关闭。

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

+1

这是正确的方式 – Paulw11

+0

嗯......这对我来说在XCode中产生了很多问题,我认为它不是真的可行。例如,对于使用此类的类,自动完成几乎停止了完全工作。任何替代品? – BlackWolf

+0

为不同的目标创建不同的源文件。这应该工作,但。尝试删除您的派生数据 – Paulw11

回答

0

代码分离

有分开的代码

  • 使用#if os(...)像你提出了两种方式。
  • 对不同的目标使用不同的文件作为 。

自动完成

的Xcode会为您的当前选定的目标只有自动完成代码。 Xcode target selector

如果你想为内部#if os(watchOS)块代码自动填充功能,那么你需要改变你的当前目标(通过工具栏)到wathOS目标。

0

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

-DWATCHOS 

然后

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

会工作。