Платформенный код для общих классов 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 будет только автозаполнение кода для вашей текущей выбранной цели.
Если вы хотите автозаполнение кода внутри #if os(watchOS)
блоки, то вам нужно изменить текущую цель (через панель инструментов) на цель wathOS.
Вы можете добавить флаг препроцессора C в Настройки сборки для цели приложения Watch.
-DWATCHOS
затем
#ifdef WATCHOS
// watchOS code here
#else
// iOS code here
#endif
буду работать.