Swift 是否有方法更改领域数据库中的数据类型?

Swift 是否有方法更改领域数据库中的数据类型?,swift,realm,realm-database,Swift,Realm,Realm Database,如图所示,我完全搞乱了数据类型(红色圆圈)。有没有办法将数据类型更改为整数 编辑 我想将数据类型从字符串更改为Int,并且我有现有的数据,所以我不能从一个新的领域开始,而只是更改var类型 class Item: Object { @objc dynamic var name: String? @objc dynamic var itemid: String? @objc dynamic var cateid: String? } 只需在对象模型中将字符串更改为Int即

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

编辑

我想将数据类型从字符串更改为Int,并且我有现有的数据,所以我不能从一个新的领域开始,而只是更改var类型

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

只需在对象模型中将字符串更改为Int即可。请注意,领域文档说明:

可以使用标准Swift语法将字符串、NSDate和NSData属性声明为可选或非可选

因此,与先前模型中的字符串不同,您将无法将Int声明为可选。您有两个选择:

  • 声明默认值:

    class Item: Object {
       @objc dynamic var name: String?
       @objc dynamic var itemid: Int = 0
       @objc dynamic var cateid: Int = 0
    }
    
  • 将其声明为真实可选:

    类项:对象{
    @objc动态变量名称:字符串?
    @objc dynamic var itemid=RealmOptional()
    @objc动态变量cateid=realmopational()
    }
    

  • 有关每个解决方案的更多信息,请参见和

    我可能误解了这个问题,但您似乎将现有数据存储为字符串,并且希望将所有这些数据“转换”为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
            }
        }
    })
    
    将存储该模型,即使从未写入任何数据。如果在该行之后,var类型从字符串更改为Int,则会抛出迁移错误

    如果是这种情况,删除领域并从头开始是一种选择,如上所述,迁移块也是一种选择


    如果这是从未使用过的全新模型,那么正如注释和其他答案所示,只需将字符串更改为Int。

    只需将变量类型更改为
    Int
    。您还应该将您的问题包括领域模型定义,而不是db的屏幕截图,以便就主题提出问题。@DávidPásztor我可能遗漏了一些内容或不理解该问题,但更改现有模型的基本类型和数据不会引发迁移错误吗?请参阅我的答案以了解我的意思。@Jay OP没有询问迁移现有数据库的问题,只是更改了数据类型:)当然,如果要转换现有数据库,需要实现迁移block@D阿维德帕斯托尔感谢您的澄清。我正在查看屏幕截图中显示的现有数据-不确定这是否是一个因素。为了澄清,如果对象模型以任何方式被访问,(例如:
    let items=realm.object(Item.self)
    ),即使从未写入任何数据,该模型也将存在于realm文件中,如果字符串更改为Int,它将抛出迁移错误。嗨,Jay,你能帮我编辑我的问题吗?我的问题似乎不是很清楚。。。但你的答案正是我想做的。@kit当然!我在问题中添加了一些小的修改,以便于澄清——首先,这对我来说是相当清楚的。很高兴答案有用。
    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
            }
        }
    })
    
    let items = realm.object(Item.self)