swift - 有没有办法改变领域数据库中的数据类型?
问题描述
如您所见,我完全弄乱了数据类型(红色圆圈)。有没有办法将数据类型更改为整数?
编辑
我想将数据类型从 String 更改为 Int 并且我有现有数据,所以我不能从一个新领域开始,而只是更改 var 类型。
class Item: Object {
@objc dynamic var name: String?
@objc dynamic var itemid: String?
@objc dynamic var cateid: String?
}
解决方案
我可能误解了这个问题,但您似乎将现有数据存储为字符串,并且您想将所有这些数据“转换”为 Int。
您不能直接将类型更改为另一种类型,也不能更改存储的数据。如果这样做,它将被标记为错误。
Error!
Migration is required due to the following errors:
- Property 'Item.itemid' has been changed from 'string' to 'int'.
您需要合并一个迁移块以将字符串值“转换”为 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,则会引发迁移错误。
如果是这种情况,删除领域并从头开始是一种选择,如上所述,这是一个迁移块。
如果这是从未使用过的全新模型,那么正如评论和其他答案所建议的那样,只需将 String 更改为 Int。
推荐阅读
- javascript - 尝试在 javascript 中变形 SVG
- python - 我正在尝试制作一个平台游戏,其关卡在完成上一个后出现
- javascript - 将父组件 ComponentDidMount 数据传递给子 ComponentDidMount
- node.js - 如何使用 MERN 或任何其他简单方式创建聊天应用程序?
- python - 如何使用python按时间间隔发送电子邮件?
- javascript - 如何从表单发送只读值?
- c - 以下C运算符如何组合
- javascript - 单击其他时停止播放音频,多次单击时没有重复事件
- javascript - 使用-> document.elemetbyid 在 javascript 的 givinen 输入中字母计数不重复
- php - 单击表中的特定行时如何查看数据库中特定行的数据