объект сопоставления ios JSON - PullRequest
0 голосов
/ 29 мая 2018

Я работаю над приложением iOS в Swift.

Я использую RealmSwift, ObjectMapper и ObjectMapper_Realm, чтобы получить данные из файла JSON и сохранить их в Realm.До сих пор он работал нормально, но я получил массив String без извлечения ключа на том же уровне, что и другой объект, и я не знаю, как это сделать ...

Вот мой объект:

 "books": 
    [
            {
              "id": 56436886, 
              "type": "Book",
              "title": "Title of the book",
              "authors": [
                         "Name FirstName",
              ]
            }
    ]

и вот мой класс для картографии:

class Book: Object, Mappable {

// MARK: Declaration for string constants to be used to decode and also serialize.
private struct SerializationKeys {

    static let id = "id"
    static let type = "type"
    static let title = "title"
    static let authors = "authors"

}

// MARK: Properties
@objc dynamic var id: Int = 0
@objc dynamic var type: String?
@objc dynamic var title: String?
var authors = List<Author>()

// MARK: ObjectMapper Initializers
/// Map a JSON object to this class using ObjectMapper.
///
/// - parameter map: A mapping from ObjectMapper.
convenience required init?(map: Map) {
    self.init()
}

// MARK: - Model meta informations
override class func primaryKey() -> String? {
    return "id"
}

override class func ignoredProperties() -> [String] {
    return []
}

/// Map a JSON object to this class using ObjectMapper.
///
/// - parameter map: A mapping from ObjectMapper.
public func mapping(map: Map) {

    id <- map[SerializationKeys.id]
    type <- map[SerializationKeys.type]
    title <- map[SerializationKeys.title]
    authors <- (map[SerializationKeys.authors], ListTransform<Author>())

}

}

А вот мой класс Автор:

class Author: Object, Mappable {

@objc dynamic var authorName: String?

// MARK: - Model meta informations
override class func primaryKey() -> String? {
    return "authorName"
}

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

func mapping(map: Map) {
    self.authorName <- map
}

}

Я не знаю, как отобразить в классе Author, поэтому, когда я получаю свой объект JSON, вся моя книга сохраняется, кроме авторов ...

Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Спасибо большое.Он отлично работает с:

  if let tmpAuthors = map.JSON[SerializationKeys.authors] as? [String] {
        for author in tmpAuthors {
            let authorObject = Author()
            authorObject.authorName = author
            authors.append(authorObject)
        }
    }
0 голосов
/ 29 мая 2018

Вы пытались отобразить без использования промежуточного объекта Author?Отображение массива строк должно работать нормально.Проверьте https://github.com/Hearst-DD/ObjectMapper#objectmapper--realm.

Кроме того, map имеет свойства currentKey и currentValue, которые могут содержать то, что вам нужно использовать с Author использованием сущностей.

...