在现有项目中保存大型类数组的最佳和最快方法是啥?领域不工作
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 的链接。
【讨论】:
以上是关于在现有项目中保存大型类数组的最佳和最快方法是啥?领域不工作的主要内容,如果未能解决你的问题,请参考以下文章