Платформенный код для общих классов watchOS/iOS в Swift?

В настоящее время я создаю приложение для iOS с расширением приложения watchOS. У меня есть определенные классы, которые совместно используются обоими приложениями, и они в значительной степени идентичны на обеих платформах, но с некоторыми вариациями. Мне интересно, как это лучше всего реализовано. Прямо сейчас я использую следующее:

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

или же

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

Хотя это работает, это создает несколько проблем, поскольку XCode, похоже, довольно запутался по этому поводу. При использовании этого синтаксиса отступы, автозаполнение и список методов немного отключены.

Как правильно это сделать? Как добавить свойства и методы iOS/watchOS в общие классы в Swift?

2 ответа

Разделение кода

Есть два способа отделить код

  • использование #if os(...) как ты и предложил.
  • Используйте отдельные файлы для разных целей.

Авто завершение

XCode будет только автозаполнение кода для вашей текущей выбранной цели. Селектор цели XCode

Если вы хотите автозаполнение кода внутри #if os(watchOS) блоки, то вам нужно изменить текущую цель (через панель инструментов) на цель wathOS.

Вы можете добавить флаг препроцессора C в Настройки сборки для цели приложения Watch.

-DWATCHOS

затем

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

буду работать.

Другие вопросы по тегам