【问题标题】:Swift Realm Results to Editable object or arraySwift Realm 结果到可编辑对象或数组
【发布时间】:2020-03-02 13:08:33
【问题描述】:

好的,我知道我不能修改 Realm Object 的结果。

那么什么是更改数据的最佳方法。

首先我将所有 Realm 数据作为结果获取

let m = Month.getAllEntriesByDateAsc()

现在我需要遍历所有数据来修改它。 (这是一个重新计算整个表格数据的函数。)

所以我想遍历数据并执行以下操作:

for i in m {

   var d = i

   // perform calculations like
   d.value = 9999 

}

我想对d做所有的修改。

这些是我可以用来从 Realm 数据中创建新可食用对象的某种映射吗?

以前我做过这样的事情:

for i in m {

    let d = Month()
    d.value = i.value
    d.status = i.status

}

但现在有很多变数。

我需要什么来将 Realm 对象更改为 Model 对象?

而且 .toArray() 的东西在循环中不起作用?不知道为什么。

谢谢。

【问题讨论】:

  • 你的 for 循环有什么问题?您可能应该将它放在 write 块中,但除此之外,它看起来非常好。
  • 无法修改领域对象的结果。 不正确。结果包含领域对象 - 可以在写入循环内轻松修改这些对象。此外,这不是一个计算 `d.value = 9999* 它是一个赋值,如果 d 不是由领域管理的,它也可以在写循环之外进行修改。这个问题有点含糊,我们不知道您的 Realm 对象是什么样子,所以目前任何答案都是猜测。
  • 例如,我只是使用了“9999”。我只需要找到一种方法将信息放入新的模型对象中,以便可以修改数据并且可以从 Realm 中解放出来。我需要循环从 Results 进入 Month() 。谢谢你的帮助。
  • 有没有办法用键值做一个循环(映射)?那也很好。
  • 你需要澄清这个问题!你的 Realm 模型是什么样的?您可以轻松地制作可以修改的 Realm 对象的非托管副本,但同样,了解模型的外观将有助于我们了解您正在尝试做什么,以便我们制定答案。此外,在 cmets 中回复时,请使用 @ 符号回复 - 这将通知我们您已回复。比如@diogenes。

标签: swift realm


【解决方案1】:
extension Results {
    func toArray<T>(ofType: T.Type) -> [T] {
        var array = [T]()
        for i in 0 ..< count {
            if let result = self[i] as? T {
                array.append(result)
            }
        }

        return array
    }
}

来自here

【讨论】:

  • 我已经尝试过了,但它不适用于“d”。我有那个“m”,但如果可能的话我需要在循环内做?
  • @diogenes 您必须提供您尝试过的示例以及遇到的错误。
  • 它不会让我这样做:var d = i.toArray(Month)。我收到“'Month' 类型的值没有成员 'toArray'”错误
  • @diogenes 您可能不想执行此答案中显示的操作。将结果转换为数组会破坏对象和领域之间的连接,您将不再收到有关这些对象的事件或通知。他们也可能会失去他们的订单和其他一些事情。此外,您可以用一行代码替换所有代码let myArray = Array(realmResults)
  • 我试图只做一个数组但得到错误:无法推断通用参数“元素”。初始化程序 'init(_:)' 要求 'Month' 符合 'Sequence'
猜你喜欢
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多