ObjectMapper, как я могу изменить тип данных при отображении в Swift - PullRequest
0 голосов
/ 27 апреля 2018

Я использую эту библиотеку ObjectMapper для сопоставления JSON с объектом Core Data и наоборот.

Но проблема здесь в том, что я не могу набирать объекты.

здесь

import ObjectMapper
class network: NSManagedObject, Mappable {
  @NSManaged var localId: NSNumber?
  @NSManaged var version: String?
  @NSManaged var port: String?

  required public init?(map: Map) {
    let ctx = DbHelper .getContext()
    let entity = NSEntityDescription.entity(forEntityName: "network", in: ctx)
    super.init(entity: entity!, insertInto: ctx)

    mapping(map: map)
  }

   public func mapping(map: Map) {
    localId <- map["localId"]
    port <- map["port"] // Returns Int but I want to save it as String
    version <- map["version"] // Returns Int but I want to save it as String
  }
}

Здесь показано, как сохранить версию и порт в виде строки, когда я получаю значение из JSON как Int.

Надеюсь, я объясню свой вопрос, если потребуется дальнейшее разъяснение, пожалуйста, дайте мне знать.

Спасибо

1 Ответ

0 голосов
/ 27 апреля 2018

Во многих ситуациях вы можете использовать встроенный класс преобразования TransformOf, чтобы быстро выполнить желаемое преобразование. TransformOf инициализируется двумя типами и двумя замыканиями. Типы определяют, во что преобразуется преобразование, и замыкания выполняют фактическое преобразование.

Например, если вы хотите преобразовать значение JSON String в Int, вы можете использовать TransformOf следующим образом:

let transform = TransformOf<Int, String>(fromJSON: { (value: String?) -> Int? in 
        // transform value from String? to Int?
        return Int(value!)
    }, toJSON: { (value: Int?) -> String? in
        // transform value from Int? to String?
        if let value = value {
            return String(value)
        }
        return nil
    })

id <- (map["port"], transform)

Вот более сжатая версия вышеупомянутого:

id <- (map["port"], TransformOf<Int, String>(fromJSON: { Int($0!) }, toJSON: { $0.map { String($0) } }))

Я надеюсь, что вы можете найти решение из этого.

Решение получено от: https://github.com/Hearst-DD/ObjectMapper

...