Ios 我可以在Swift领域将RealmObject序列化为JSON或NSDictionary吗?

Ios 我可以在Swift领域将RealmObject序列化为JSON或NSDictionary吗?,ios,swift,realm,Ios,Swift,Realm,我正在测试Realm,但我找不到一种简单的方法将我的对象转换为JSON。 我需要将数据推送到我的REST接口。 我怎样才能用swift呢 class Dog: Object { dynamic var name = "" } class Person : Object { dynamic var name = "" let dogs = List<Dog>() } **对不起,代码太难看了。我对Realm也很陌生,但我认为最简单的方法是反思: 我想我找到了解决办法。

我正在测试Realm,但我找不到一种简单的方法将我的对象转换为JSON。 我需要将数据推送到我的REST接口。 我怎样才能用swift呢

class Dog: Object {
  dynamic var name = ""
}

class Person : Object {
  dynamic var name = ""
  let dogs = List<Dog>()
}

**对不起,代码太难看了。

我对Realm也很陌生,但我认为最简单的方法是反思:


我想我找到了解决办法。 我不依赖于性能

extension Object {
  func toDictionary() -> NSDictionary {
    let properties = self.objectSchema.properties.map { $0.name }
    let dicProps = self.dictionaryWithValuesForKeys(properties)

    var mutabledic = NSMutableDictionary()
    mutabledic.setValuesForKeysWithDictionary(dicProps)

    for prop in self.objectSchema.properties as [Property]! {

      if let objectClassName = prop.objectClassName  {
        if let nestedObject = self[prop.name] as? Object {
          mutabledic.setValue(nestedObject.toDictionary(), forKey: prop.name)
        } else if let nestedListObject = self[prop.name] as? ListBase {
            var objects = [AnyObject]()
            for index in 0..<nestedListObject._rlmArray.count  {
              if let object = nestedListObject._rlmArray[index] as? Object {
                objects.append(object.toDictionary())
              }
            }
            mutabledic.setObject(objects, forKey: prop.name)
        }
      }
    }
    return mutabledic
  }
}
扩展对象{
func toDictionary()->NSDictionary{
让properties=self.objectSchema.properties.map{$0.name}
让dicProps=self.dictionaryWithValuesForKeys(属性)
var mutabledic=NSMutableDictionary()
可变DIC.setValuesForKeysWithDictionary(dicProps)
将self.objectSchema.properties中的prop设置为[Property]{
如果让objectClassName=prop.objectClassName{
如果让nestedObject=self[prop.name]作为?对象{
setValue(nestedObject.toDictionary(),forKey:prop.name)
}否则,如果将nestedListObject=self[prop.name]设为?ListBase{
var objects=[AnyObject]()

对于0..中的索引,这是我的解决方案。使用unsafeBitCast可避免转换失败警告

extension Object {
    func toDictionary() -> [String:AnyObject] {
        let properties = self.objectSchema.properties.map { $0.name }
        var dicProps = [String:AnyObject]()
        for (key, value) in self.dictionaryWithValuesForKeys(properties) {
            if let value = value as? ListBase {
                dicProps[key] = value.toArray()
            } else if let value = value as? Object {
                dicProps[key] = value.toDictionary()
            } else {
                dicProps[key] = value
            }
        }
        return dicProps
    }
}

extension ListBase {
    func toArray() -> [AnyObject] {
        var _toArray = [AnyObject]()
        for i in 0..<self._rlmArray.count {
            let obj = unsafeBitCast(self._rlmArray[i], Object.self)
            _toArray.append(obj.toDictionary())
        }
        return _toArray
    }
}
扩展对象{
func toDictionary()->[字符串:AnyObject]{
让properties=self.objectSchema.properties.map{$0.name}
var dicProps=[String:AnyObject]()
对于self.dictionaryWithValuesOfferKeys(属性)中的(键、值){
如果let value=value as?ListBase{
dicProps[key]=value.toArray()
}否则,如果让值=值作为对象{
dicProps[key]=value.toDictionary()
}否则{
dicProps[键]=值
}
}
返回道具
}
}
扩展列表库{
func toArray()->[AnyObject]{
var _toArray=[AnyObject]()

对于0中的i..您能为我们提供您尝试过的源代码吗?谢谢,它可以正常工作,但不能处理列表的属性,如
class Person:Object{dynamic var name=”“dynamic var age=0 let dogs=List()}
每个属性都有属性
类型
,即。使用它可以了解您的属性是否是对象而不是自身[…]查找。另外,请注意循环引用:当一个对象引用另一个对象时,反之亦然。不,因为我无法将对象强制转换为PropertyType。很好!但是嵌套元素的附加不再起作用。当您
如果让嵌套的ListObject执行该检查时,检查总是失败。Xcode会在该行中添加一条警告:
强制转换为m'RLMObject'到不相关类型的'Object'总是失败
。您是否遇到同样的问题?您知道解决方案吗?
extension Object {
  func toDictionary() -> NSDictionary {
    let properties = self.objectSchema.properties.map { $0.name }
    let dicProps = self.dictionaryWithValuesForKeys(properties)

    var mutabledic = NSMutableDictionary()
    mutabledic.setValuesForKeysWithDictionary(dicProps)

    for prop in self.objectSchema.properties as [Property]! {

      if let objectClassName = prop.objectClassName  {
        if let nestedObject = self[prop.name] as? Object {
          mutabledic.setValue(nestedObject.toDictionary(), forKey: prop.name)
        } else if let nestedListObject = self[prop.name] as? ListBase {
            var objects = [AnyObject]()
            for index in 0..<nestedListObject._rlmArray.count  {
              if let object = nestedListObject._rlmArray[index] as? Object {
                objects.append(object.toDictionary())
              }
            }
            mutabledic.setObject(objects, forKey: prop.name)
        }
      }
    }
    return mutabledic
  }
}
extension Object {
    func toDictionary() -> [String:AnyObject] {
        let properties = self.objectSchema.properties.map { $0.name }
        var dicProps = [String:AnyObject]()
        for (key, value) in self.dictionaryWithValuesForKeys(properties) {
            if let value = value as? ListBase {
                dicProps[key] = value.toArray()
            } else if let value = value as? Object {
                dicProps[key] = value.toDictionary()
            } else {
                dicProps[key] = value
            }
        }
        return dicProps
    }
}

extension ListBase {
    func toArray() -> [AnyObject] {
        var _toArray = [AnyObject]()
        for i in 0..<self._rlmArray.count {
            let obj = unsafeBitCast(self._rlmArray[i], Object.self)
            _toArray.append(obj.toDictionary())
        }
        return _toArray
    }
}