我对 iOS 开发还比较陌生,但这是一个我一直在讨论的问题。在我制作的最后一个应用程序中,一个高中教科书定义审查应用程序,我有大量从未更改过的文本。由于不赞成使用全局变量,我寻找了诸如 Singletons 之类的替代方案(这些将如何更优雅让我难以理解,感觉多余)、prepareForSegue(解决了问题,但感觉必须有更好的方法)和永久存储(没有意义,因为数据永远不会改变,但它提供了一个中央存储库)。天真地,我选择了后者,实现了一个 plist,降低了性能。
我对这个问题使用单例的解释(如果我的问题源于误解):
class Global {
let array = ["item1","item2",...,"item1042"]
}
现在我可以通过 Global.array 从其他类访问 array 。我的数组实际上是一个 3 维数组,但是我看不出这会如何改变问题(本来希望创建一个有很多实例的类,但为了便于阅读,这感觉就像使问题进一步复杂化)。
除了使用 coreData,这似乎又有点矫枉过正,我已经束手无策了。
我想在我的所有类(class)中使用一个单一的、未更改的数组/字典,最好不要将其复制到每个类(class)中。
实现这一目标的正确风格是什么?
如果这个问题已经得到解答,我深表歉意(似乎一般没有得到解答),但无论我找到什么答案,要么对我的理解水平来说太复杂,要么没有帮助。
Best Answer-推荐答案 strong>
有很多方法可以在单个应用 session 中持久化数据 。但是,在所有这些中,我更喜欢在 AppDelegate 中创建一个变量,并使用 shared instance 在应用程序中使用它。
这样您就不需要创建单独的 singleton 或任何其他具有 static variable 或任何类型的 global的类 变量 .
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate
{
let array = ["item1","item2","item1042"]
//....
}
class ViewController: UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
print((UIApplication.shared.delegate as? AppDelegate)?.array)
}
}
另外,如果你想在 多个应用 session 中持久化数据 ,你可以使用 UserDefaults 、Core Data 或 文件系统 .
关于ios - 在多个 swift 类中重用大型未更改数组而不使用全局变量,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/46142920/
|