ios – 使用swift 3向Realm添加数组

前端之家收集整理的这篇文章主要介绍了ios – 使用swift 3向Realm添加数组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是Realm中的新手,我尝试添加一个数组,就像我用字符串一样,我最终得到了一些错误.经过一番搜索,我发现了一个解决方案:
  1. class Sensors : Object {
  2.  
  3.  
  4. dynamic var name = ""
  5. dynamic var message = ""
  6.  
  7. var topic: [String] {
  8. get {
  9. return _backingNickNames.map { $0.stringValue }
  10. }
  11. set {
  12. _backingNickNames.removeAll()
  13. _backingNickNames.append(objectsIn: newValue.map({ RealmString(value: [$0]) }))
  14. }
  15. }
  16. let _backingNickNames = List<RealmString>()
  17.  
  18. override static func ignoredProperties() -> [String] {
  19. return ["topic"]
  20. }
  21.  
  22.  
  23.  
  24.  
  25. }
  26.  
  27. class RealmString: Object {
  28. dynamic var stringValue = ""
  29. }

这工作得非常好,现在我想在这个类中添加另一个数组.
如果有人知道用域名添加数组的任何其他方法,请分享.

提前致谢

解决方法

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

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

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

  1. // Dog model
  2. class Dog: Object {
  3. dynamic var name = ""
  4. dynamic var owner: Person?
  5. }
  6.  
  7. // Person model
  8. class Person: Object {
  9. dynamic var name = ""
  10. dynamic var birthdate = NSDate(timeIntervalSince1970: 1)
  11.  
  12. let dogs = List<Dog>()
  13. }
  14.  
  15. let jim = Person()
  16.  
  17. let dog1 = Dog()
  18. let dog2 = Dog()
  19.  
  20. // here is where the magic happens
  21. jim.dogs.append(objectsIn: [dog1,dog2])

如果你想做相反的事情(从List转换为数组),只需:

  1. let dogsArray = Array(jim.dogs)

•••••••

回到own posted solution,您可以轻松地重构模型以适应这种情况.每个Sensor对象可以连接多个Topic和几个Message对象.

只需抛弃消息和主题计算属性,并分别将topicV和messageV重命名主题和消息.还将RealmString重命名为Topic,将RealmString1重命名为Message.

现在,您可以轻松地遍历连接到传感器的主题,例如:

  1. for topic in sensor1.topics { ... }

或者,如果要将消息附加到传感器,可以执行以下操作(不要忘记先将新创建的对象放到DB上):

  1. let message1 = Message()
  2. message1.stringValue = "Some text"
  3.  
  4. sensor2.messages.append(message1)

所以,不需要使用中间Swift阵列.

猜你在找的iOS相关文章