【问题标题】:How to have a good project code organization in Xcode?如何在 Xcode 中拥有良好的项目代码组织?
【发布时间】:2020-10-06 20:09:56
【问题描述】:

由于文件数量,我的项目变得混乱,我需要开发人员的建议。 例如,我有字符串扩展,一开始我为每个目标创建一个。一个用于ios,一个用于手表操作系统等......

所以我有类似的东西:

  • 适用于 iOS 的 extensionString.swift
  • 用于 watchOS 的 extensionStrinWatchg.swift
  • extensionStringTE.swift 今天的扩展

但是通过这种方法,我在一些目标之间得到了公共代码部分,重复代码永远不会好,你同意。

所以我开始制作commun String 扩展文件,比如

  • extensionStringIOS+watch.swift
  • extensionStringIOS+TD+watch.swift
  • extensionStringIOS+TD.swift 等等……

添加仅针对我们获得的特定目标的版本:

  • 用于 ios 的 extensionString.swift
  • 用于 watchOS 的 extensionStrinWatch.swift
  • extensionStringTE.swift 今天的扩展
  • extensionStringIOS+watch.swift
  • extensionStringIOS+TD+watch.swift
  • extensionStringIOS+TD.swift 等等……

你明白……那很多,而且很乱。我有时间去寻找该放在哪个文件中 所以现在想象一下这种方法适用于所有事情...... 文件数量变得巨大...... 我在扩展、类和其他方面遇到了这个问题......

所以每个目标一个文件 -> 重复代码 第二种方法:文件数量庞大,项目凌乱,浪费时间

所以我有一个想法,但我想知道这是否是正确的做法。什么是约定?

我的想法是在我的项目中的所有目标之间共享一个 extensionString.swift,并将这样的东西用于不应该用于所有目标的代码部分

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

所以这应用在我的项目中(不仅是扩展,还有类等..)可以让我删除大量文件并像这个函数一样重新组合:

/// 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
    }

【问题讨论】:

  • 至少一个好的代码组织是使用bool(forKey
  • @vadian 刚刚改了,谢谢!

标签: swift xcode code-organization


【解决方案1】:

我认为这里的每个答案都应该从大胖子恕我直言开始

没有灵丹妙药,您必须根据您的特定项目来决定选择哪种方式。

对于我来说,我会尝试将所有逻辑分离到小的框架中,例如 ExtensionsCrossplatform、ExtensionsIOS、ExtensionsWatchOS 等。

将所有东西都放在一个地方的想法不太好,并且会导致所有模块和平台之间的紧密耦合。

事实上,许多大型应用程序都由大量的小模块(超过 50 个)组成。

这是一个视频,可以更详细地描述这个想法https://badootech.badoo.com/the-immense-benefits-of-not-thinking-in-screens-6c311e3344a0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多