1

私はこのJSONを持っています:

{
"location": {
  "position": {
    "type": "Point",
    "coordinates": [
      45.579553,
      11.751805
    ]
  }
}
}

これは別の JSON オブジェクトに属します。

Realm と ObjectMapper でマップしようとするとcoordinates、double の配列であるプロパティをマップするのが難しいことがわかりました。

それがドキュメントを読むことであり、SOには意味があるようです:

import Foundation
import RealmSwift
import ObjectMapper


class Coordinate:Object, Mappable{

dynamic var latitude:Double = 0.0
dynamic var longitude:Double = 0.0

required convenience init?(_ map: Map) {
    self.init()
}
func mapping(map: Map) {
    latitude <- map[""]
    longitude <- map[""]

}


}

class Position: Object, Mappable{

var type:String = ""
var coordinates:Coordinate?

required convenience init?(_ map: Map) {
    self.init()
}
func mapping(map: Map) {
    type <- map["type"]
    coordinates <- map["coordinates"]

}

}

class Location: Object, Mappable{

dynamic var id = ""
dynamic var position:Position?
dynamic var desc = ""

override static func indexedProperties()->[String]{
    return["id"]
}

override class func primaryKey() -> String? {
    return "id"
}


required convenience init?(_ map: Map) {
    self.init()
}

func mapping(map: Map) {
    id <- map["id"]
    position <- map["position"]

}
}

ただし、「座標」オブジェクトをマップする方法を理解するのに行き詰まっています。この問題は ObjectMapper 自体とは何の関係もないことに注意してください。これは、Double の配列を Realm モデルのプロパティに割り当てる方法に関する問題です。

4

3 に答える 3

2

この問題の指示に従って、これを解決できました。

https://github.com/realm/realm-cocoa/issues/1120 (クレジット @jazz-mobility)

class DoubleObject:Object{

    dynamic var value:Double = 0.0

}

class Position: Object, Mappable{

    var type:String = ""
    var coordinates = List<DoubleObject>()

    required convenience init?(_ map: Map) {
        self.init()
    }

    func mapping(map: Map) {
        type <- map["type"]

        var coordinates:[Double]? = nil
        coordinates <- map["coordinates"]


        coordinates?.forEach { coordinate in
            let c = DoubleObject()
            c.value = coordinate
            self.coordinates.append(c)
        }

    }

}
于 2016-05-26T20:04:03.047 に答える