gpt4 book ai didi

swift - 有没有办法更改 Realm 数据库中的数据类型?

转载 作者:行者123 更新时间:2023-12-01 15:32:46 26 4
gpt4 key购买 nike

如您所见,我完全弄乱了数据类型(红色圆圈)。有没有办法将数据类型更改为整数?

编辑

我想将数据类型从 String 更改为 Int,并且我有现有数据,所以我不能从一个新 Realm 开始,只能更改 var 类型。

class Item: Object {
@objc dynamic var name: String?
@objc dynamic var itemid: String?
@objc dynamic var cateid: String?
}

enter image description here

最佳答案

我可能误解了这个问题,但您似乎将现有数据存储为字符串,并且您想将所有这些数据“转换”为 Int。

您不能直接将类型更改为另一种类型并更改存储的数据。如果这样做,它将被标记为错误。

Error!
Migration is required due to the following errors:
- Property 'Item.itemid' has been changed from 'string' to 'int'.

您需要合并一个 migration block将字符串值“转换”为 Int。假设我们向我们的对象“item_id”添加了一个新的 Int 属性,沿着这些行的东西会将您的字符串迁移到 int 并且在字符串无效的情况下,它将被分配一个值 0

Realm.Configuration.defaultConfiguration = Realm.Configuration(
schemaVersion: 1,
migrationBlock: { migration, oldSchemaVersion in
if (oldSchemaVersion < 1) {
migration.enumerateObjects(ofType: Item.className()) { oldObject, newObject in
let stringValue = oldObject!["itemid"] as! String
newObject!["item_id"] = Int(stringValue) ?? 0
}
}
})

此外,一旦访问 Realm,对象模型就会写入 Realm 文件。所以一个简单的问题

let items = realm.object(Item.self)

即使没有写入数据,也会存储该模型。如果在该行之后,var 类型从 String 更改为 Int,它将抛出迁移错误。

如果是这种情况,删除 Realm 并从头开始是一种选择,并且如上所述,这是一个迁移 block 。

如果这是从未使用过的全新模型,那么正如评论和其他答案所建议的那样,只需将 String 更改为 Int。

关于swift - 有没有办法更改 Realm 数据库中的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59319894/

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