Как иметь хорошую организацию кода проекта в Xcode? - PullRequest
1 голос
/ 17 июня 2020

Мой проект становится беспорядочным из-за количества файлов, мне нужны советы от разработчиков. Например, у меня есть строковые расширения, в начале я создавал по одному для каждой цели. Один для ios, один для ОС часов и т.д. c ...

, поэтому у меня было что-то вроде:

  • extensionString.swift для iOS
  • extensionStrinWatchg.swift для watchOS
  • extensionStringTE.swift на сегодня Extension

Но с помощью этого метода у меня есть общая часть кода между некоторыми целями, и повторение кода никогда не годится, вы согласны.

Итак, я начал создавать файлы расширения командной строки, такие как

  • extensionStringIOS + watch.swift
  • extensionStringIOS + TD + watch.swift
  • extensionStringIOS + TD.swift et c ...

добавляя к этому версию, которая предназначена только для определенной c цели, мы получаем:

  • extensionString.swift для ios
  • extensionStrinWatch.swift для watchOS
  • extensionStringTE.swift на сегодня Расширение
  • extensionStringIOS + watch.swift
  • extensionStringIOS + TD + watch.swift
  • extensionStringIOS + TD.swift et c ...

Вы понимаете ... Это много, и это грязно. Я теряю время, чтобы найти, в каком файле go Так что теперь представьте этот метод для всего ... Количество файлов стало огромным ... У меня проблема с расширениями, классами и прочим ...

Итак, один файл на цель -> второй метод повторения кода: огромное количество файлов, беспорядочный проект и трата времени

Итак, у меня есть идея, но я хотел бы знать, правильный ли это способ сделать. Какая конвенция?

Моя идея состоит в том, чтобы использовать один файл extensionString.swift для всех целей в моем проекте и использовать подобные вещи для частей кода, которые не должны использоваться для всех целей.

#if !os(watchOS)
// do something
#else
// do something different
#if

Итак это применялось в моем проекте (не только расширения, но и класс et c ..) могло заставить меня удалить тонны файлов и перегруппировать, например, эту функцию:

/// boolean indicating if the user enabled the weekend days setting
    static var isWeekendDaysSettingEnabled: Bool {
        #if !os(watchOS)
            if IS_ICLOUD_ENABLED {
                return NSUbiquitousKeyValueStore.default.bool(forKey: KeyValueID.weekendDays.rawValue)
            } else {
                return UserDefaults.standard.bool(forKey: KeyValueID.weekendDays.rawValue)
            }
        #else
            return UserDefaults.standard.bool(forKey: "weekendDays")
        #endif
    }

1 Ответ

0 голосов
/ 17 июня 2020

Я думаю, что каждый ответ здесь должен начинаться с большого жирного ИМХО

Серебряной пули нет, и вы должны решить, какой путь выбрать, в зависимости от вашего конкретного проекта.

Что касается меня, я бы попытался разделить все logi c на небольшие фреймворки, например ExtensionsCrossplatform, Extensions IOS, ExtensionsWatchOS и т. Д. c.

Идея наличия все в одном месте не так хорошо и приведет к тесной связи между всеми модулями и платформами.

Фактически, многие большие приложения состоят из большого количества крошечных модулей (более 50).

Вот видео, в котором можно подробнее описать идею https://badootech.badoo.com/the-immense-benefits-of-not-thinking-in-screens-6c311e3344a0

...