OGeek|极客世界-中国程序员成长平台

标题: ios - 在多个 swift 类中重用大型未更改数组而不使用全局变量 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 18:38
标题: ios - 在多个 swift 类中重用大型未更改数组而不使用全局变量

我对 iOS 开发还比较陌生,但这是一个我一直在讨论的问题。在我制作的最后一个应用程序中,一个高中教科书定义审查应用程序,我有大量从未更改过的文本。由于不赞成使用全局变量,我寻找了诸如 Singletons 之类的替代方案(这些将如何更优雅让我难以理解,感觉多余)、prepareForSegue(解决了问题,但感觉必须有更好的方法)和永久存储(没有意义,因为数据永远不会改变,但它提供了一个中央存储库)。天真地,我选择了后者,实现了一个 plist,降低了性能。

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

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

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

除了使用 coreData,这似乎又有点矫枉过正,我已经束手无策了。

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

实现这一目标的正确风格是什么?

如果这个问题已经得到解答,我深表歉意(似乎一般没有得到解答),但无论我找到什么答案,要么对我的理解水平来说太复杂,要么没有帮助。



Best Answer-推荐答案


有很多方法可以在单个应用 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 持久化数据,你可以使用 UserDefaultsCore Data文件系统.

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






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4