我正在用 Swift 编写 iOS 应用程序。我应该使用单例吗?

Posted

技术标签:

【中文标题】我正在用 Swift 编写 iOS 应用程序。我应该使用单例吗?【英文标题】:I'm writing iOS app in Swift. Should I use singletons? 【发布时间】:2015-08-10 06:25:47 【问题描述】:

假设我正在创建一个锻炼应用,并且需要让用户创建新的锻炼和锻炼。

我们将获得以下视图控制器: 锻炼 -> 新锻炼 -> 选择现有或创建新锻炼 -> 创建新锻炼 -> 选择锻炼或创建新锻炼 -> 创建新锻炼 -> 组数和重复次数。

用户应该能够在创建新锻炼时在这些视图之间来回切换。因此,锻炼参数应该临时保存在某个地方,直到用户对所有内容都满意并单击“保存锻炼”按钮,最终将其保存到 sql 数据库/coredata。

我应该使用segues 和delegates 在视图之间传递锻炼参数,还是应该在这里创建和使用“NewWorkout”和“NewExercise”singletons? 如果我的用户需要创建另一个锻炼,单例方法会正常工作吗?我可以只销毁第一个实例并创建一个新实例吗?

我已经开始使用 segues 了,而且一团糟。想要重构我的代码,直到为时不晚。

【问题讨论】:

如何在核心数据中创建一个临时锻炼并在控制器之间传递锻炼 ID? 这实际上也是一个选项。但我更喜欢这里的单身人士。因为我不想最终在 CoreData 中使用垃圾收集器来处理未完成的锻炼。 【参考方案1】:

我认为选秀训练不会是一个很好的单身。您可以创建一个单例来管理所有锻炼。您可以给该对象一个 draftWorkout 字段。还有一个 clearDraft 和 saveDraft 方法。

【讨论】:

这就是我的想法,谢谢。有什么不好的地方我应该避免在这里不要踩到单例反模式之一?【参考方案2】:

单身人士 - 这是一个糟糕的决定,通常你应该在第一步创建某种“锻炼”对象并在所有步骤中移动它......

【讨论】:

以上是关于我正在用 Swift 编写 iOS 应用程序。我应该使用单例吗?的主要内容,如果未能解决你的问题,请参考以下文章

检测iOS App是否是用Swift编写的

Stockfish Chess Engine 与 Swift 中的 iOS 项目集成

无法从 UITextField 获取文本 - Swift - iOS

用全新的 Swift 应用替换 Objective-C iOS 应用,同时保留来自 NSUserDefaults 的值

iOS - Swift 蓝牙 - 未发现 Android 设备

缺少 iOS Swift 方向更改动画