有没有一种方法可以根据所使用的平台为结构定义协议属性?

时间:2019-04-11 17:06:52

标签: swift swift-protocols

我正在使用iOS和WatchOS。

我有一些在iPhone上创建并发送到Apple Watch的结构。结构的目标成员身份同时属于iOS应用和WatchKit扩展。

我想为这些结构定义一个协议属性,这些属性只能在WatchKit扩展中访问:

var complicationTimelineEntry: CLKComplicationTimelineEntry? { get }

CLKComplicationTimelineEntryClockKit框架的一部分,该框架在iOS上不可用,因此我无法编译。

有办法吗?还是我应该放弃“一刀切”的方法,然后将问题分解?

当前,我只是使用另一个协议在WatchOS端为该结构创建扩展。它可以工作,但是比我想要的多了几个步骤。

1 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

protocol xyz {
  #if os(watchOS)
      var complicationTimelineEntry: CLKComplicationTimelineEntry? { get }
  #endif
  .
  .
  .
}

如果基本上检查应用程序正在运行的 os

其他可用选项os(iOS)os(tvOS)os(OSX)