ios - 使用 swift 3 将数组添加到 Realm

标签 ios arrays swift realm

我是 Realm 的新手,我尝试像处理字符串一样添加一个数组,但最后遇到了一些错误。经过一番搜索,我找到了解决方案:

class Sensors : Object {


    dynamic var name = ""
    dynamic var message = ""

    var topic: [String] {
        get {
            return _backingNickNames.map { $0.stringValue }
        }
        set {
            _backingNickNames.removeAll()
            _backingNickNames.append(objectsIn: newValue.map({ RealmString(value: [$0]) }))
        }
    }
    let _backingNickNames = List<RealmString>()

    override static func ignoredProperties() -> [String] {
        return ["topic"]
    }




}

class RealmString: Object {
    dynamic var stringValue = ""
}

效果很好,现在我想在这个类中添加另一个数组。 如果有人知道用 Realm 添加数组的任何其他方法,请分享。

提前致谢

最佳答案

作为一般规则,使用 Realm 提供的一对多关系比尝试使用数组来模拟它们更有效(Realm 的集合是惰性的,包含的对象仅在需要时实例化,而不是简单的Swift 数组)。

在您的情况下,如果我正确理解您要执行的操作,您希望将 [RealmString] Swift 数组添加到 _backingNickNames 列表中。

为什么不使用 Realm 的 List 类的 append(objectsIn:) 方法(参见 here ),如下所示:

// Dog model
class Dog: Object {
    dynamic var name = ""
    dynamic var owner: Person?
}

// Person model
class Person: Object {
    dynamic var name = ""
    dynamic var birthdate = NSDate(timeIntervalSince1970: 1)

    let dogs = List<Dog>()
}

let jim = Person()

let dog1 = Dog()
let dog2 = Dog()

// here is where the magic happens
jim.dogs.append(objectsIn: [dog1, dog2])

如果你想做相反的事情(从列表转换为数组)就这样做:

let dogsArray = Array(jim.dogs)

• • • • • • •

回到你的own posted solution ,您可以轻松地重构模型以适应这种情况。每个 Sensor 对象可以附加多个 Topic 和多个 Message 对象。

只需放弃 messagetopic 计算属性并将 topicVmessageV 重命名为 topicsmessages 分别。同时将 RealmString 重命名为 Topic 并将 RealmString1 重命名为 Message

现在,您可以像这样轻松地遍历附加到传感器的主题:

for topic in sensor1.topics { ... }

或者,如果你想将消息附加到传感器,你可以这样做(不要忘记先将新创建的对象 properly add 添加到数据库):

let message1 = Message()
message1.stringValue = "Some text"

sensor2.messages.append(message1)

因此,无需使用中间 Swift 数组。

关于ios - 使用 swift 3 将数组添加到 Realm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40279497/

相关文章:

iphone FMDB/SQLite 更新查询不起作用

ios - 下载 JSON 数据后如何重新加载 tableview 的数据

ruby-on-rails - Ruby on Rails - ActiveSupport : Array Extensions

ios - UITableViewCell在编辑模式下按减号后消失

ios - 如何快速写入和读取 float 据,而不是使用字符串?

ios - Swift iOS 中的 Facebook 相册访问

javascript - 名为 `name` 的数组按行而不是单词打印字符。使用 for 循环

javascript - 将输入值插入 JSON 数组

Objective-C int 桥接为 Int32 到 Swift

iOS Firebase 分离观察者监听器