在现有项目中保存大型类数组的最佳和最快方法是啥?领域不工作

Posted

技术标签:

【中文标题】在现有项目中保存大型类数组的最佳和最快方法是啥?领域不工作【英文标题】:What is the best and quickest way to save a large Class Array in existing project? Realm isn't working在现有项目中保存大型类数组的最佳和最快方法是什么?领域不工作 【发布时间】:2020-07-01 10:57:35 【问题描述】:

首先,我是一个应用程序设计的相对业余爱好者,去年自学了高级 swift/xcode,所以提前为我的代码道歉!

我开发了一个游戏,它有一个名为 playerList 的“玩家”类数组。我目前通过编码器将此 playerList 数组转换为 JSON,然后保存到设备……但是随着我的数组的增长,这个练习开始需要很长时间,所以我正在寻找一个替代方案。我认为最好的解决方案是重写应用程序以使用 CoreDate、SQLite 等,但我现在正在寻找一个快速的解决方案。

我本可以使用 userDefaults,但是作为大型数组避开了这个,而是尝试使用 Realm 来伪造一个解决方案。

我尝试过以下操作,但每当我在加载后查看我的 playerList 时,它都是空的。我是否在这里遗漏了一些明显的东西,或者是否有比使用 Realm 更好的方法?

class PlayerArray: Object 
    var iden: Int = 0
    var allThePlayers: [Player] = playerList


func saveViaRealm() 
    
    // Get the default Realm
    let realm = try! Realm()
    
    // Define player list
    let realmPlayerList = PlayerArray()
    realmPlayerList.allThePlayers = playerList
    realmPlayerList.iden = 1
    
    // Write to realm
    try! realm.write 
        realm.add(realmPlayerList)
    


func loadViaRealm() 
    
    // Get the default Realm
    let realm = try! Realm()
    
    //Retrieve objects from realm
    let realmOutputPlayerList = realm.objects(PlayerArray.self)
    
    // Filter to iden required
    let realmFiltered = realmOutputPlayerList.filter$0.iden == 1[0]
    
    // Assign to playerList
    playerList = realmFiltered.allThePlayers


【问题讨论】:

有很多问题。数据未保存,因为需要将 Realm 属性声明为 @objc dynamic var some_var 或定义要使用 @objcMembers 管理的整个类。其次,这个类没有很好地命名。 PlayerAryay 不是一个数组,它是一个包含玩家列表的单个对象,但这也不是如何在 Realm 中定义列表;这样做let playerList = List<PlayerClass>() 哦 - 另一件事;这个 .filter$0.iden == 1[0] 可能会引起麻烦。 Realm 对象是实时的、延迟加载的,并且使用 Swift 过滤器会破坏该链接并加载所有数据 - 覆盖延迟加载的优势。假设玩家列表中有一百万个对象。使用 Swift 过滤器会将它们全部加载到内存中。当它们被延迟加载时,它没有那种影响。所以 - 当使用 Realm 时,使用 Realm 进行过滤(它还保留上面提到的实时链接)。 【参考方案1】:

我将再次阅读有关列表和声明变量的 Realm 文档。在您的对象类中,您是否遇到任何错误? RealmSwift 应该使用 @objc 动态变量声明。此外,您不应该只需要一个 let = realm。这是 Realm.io documentation 的链接。

【讨论】:

以上是关于在现有项目中保存大型类数组的最佳和最快方法是啥?领域不工作的主要内容,如果未能解决你的问题,请参考以下文章

获取数组第一项的最快方法是啥? [复制]

将大型 CSV 文件加载到核心数据中的最快方法是啥

在数据库中保存和编辑数组的最佳方法是啥(json、序列化或文本)

在 C# 中计算数组频率分布的最快方法是啥?

在 C 中将二维数组归零的最快方法是啥?

在 Excel 中筛选大型列表的最佳方法是啥?