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

标签 ios swift

我是 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/

相关文章:

ios - ScrollView 或 TableView 标题中的 UITable?

swift - 在 swift 3 Spritekit 中返回上一个 View 时出错

ios - 显示来自 Core Data ManagedObjectContext 的属性

swift - 更改 NSTableView 中标题的背景颜色

ios - 在 iOS 中使用音频队列/缓冲区的音频流 AVFoundation

ios - 在同一个文件中声明委托(delegate)协议(protocol)

ios - 如何将 .plist xml 字符串转换为 NSDictionary

iOS (Swift) 单例 Realm 对象

iphone - 选项卡推送通知 cocos2d 游戏崩溃

java - GWT RichTextArea 在 Chome/Safari iOS 上得到扩展