Есть ли способ определить свойство протокола для структуры, зависящей от того, на какой платформе оно используется? - PullRequest
1 голос
/ 11 апреля 2019

Я работаю с iOS и WatchOS.

У меня есть некоторые структуры, которые создаются на iPhone и отправляются в Apple Watch.Целевое членство структуры принадлежит как приложению iOS, так и расширению WatchKit.

Я хочу определить свойство протокола для этих структур, которое будет доступно только в расширении WatchKit:

var complicationTimelineEntry: CLKComplicationTimelineEntry? { get }

CLKComplicationTimelineEntry является частью ClockKit framework, который недоступен в iOS, и поэтому я не могу скомпилировать.

Есть ли способ сделать это?Или я должен отказаться от метода «один размер подходит всем» и устранить проблему?

В настоящее время я просто создаю расширение для структуры на стороне WatchOS с другим протоколом.Это работает, но это на несколько шагов больше, чем хотелось бы.

1 Ответ

3 голосов
/ 11 апреля 2019

вы можете сделать это:

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

, если в основном проверяет, что os , на котором работает приложение.

другие доступные опции os(iOS), os(tvOS) и os(OSX)

...