gpt4 book ai didi

ios - 在不使用全局变量的情况下在多个 swift 类中重用大型未更改数组

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:08:06 24 4
gpt4 key购买 nike

我是 iOS 开发的新手,但这是一个我不断回过头来的问题。在我制作的上一个应用程序中,一个高中教科书定义复习应用程序,我有大量从未更改过的文本。由于不赞成使用全局变量,我寻找了诸如 Singletons 之类的替代方案(我不知道这些如何更优雅,感觉多余),prepareForSegue(解决了这个问题,但感觉必须有更好的方法)和永久存储(没有意义,因为数据永远不会改变,但它提供了一个中央存储库)。我天真地选择了后者,实现了一个 plist,降低了性能。

我对这个问题使用单例的解释(以防我的问题源于误解):

class Global {
let array = ["item1","item2",...,"item1042"]
}

现在我可以通过 Global.array 从其他类访问 array。我的数组实际上是一个 3 维数组,但是我看不出这会如何改变这个问题(我宁愿创建一个有很多实例的类,但感觉只是为了可读性而使问题进一步复杂化)。

除了使用 coreData(这又一次看起来有点矫枉过正)之外,我已经束手无策了。

我想在所有类(class)中使用一个单一的、未更改的数组/字典,最好不要将其复制到每个类(class)中。

实现此目标的正确样式是什么?

如果这个问题已经得到回答,我深表歉意(通常似乎没有回答),但我发现的任何答案要么对我的理解水平来说太复杂,要么没有帮助。

最佳答案

单个应用程序 session 持久化数据的方法有很多种。但是,在所有这些之中,我更喜欢在 AppDelegate 中创建一个变量,并在使用 共享实例 的应用程序中使用它。这样你就不需要创建一个单独的 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 持久化数据,您可以使用UserDefaultsCore Data文件系统

关于ios - 在不使用全局变量的情况下在多个 swift 类中重用大型未更改数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46142920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com