2017-09-04 6 views
0

私はObjectMapperでマップされているクラスを持っています。以前はマッピングは正常に機能していましたが、プロジェクトアーキテクチャの変更により、DoubleのWebサービス戻りフィールドが暗号化された値のStringになりました。ObjectMapperでの暗号化の使用

マッピング中にwebserviceフィールドをクラス変数にキャストしてキャストすることは可能ですか?

これは私が今日持っているものです。

class PosicaoConsolidada: Mappable { 
    var portifolioBalance: Double! 
    var families: [Family]! 

    required init?(map: Map) {} 

    public func mapping(map: Map) { 
     portifolioBalance <- map["pointsBalance"] 
     families <- map["fam"] 
    } 
} 

これは私がやって想像するものです:

class PosicaoConsolidada: Mappable { 
    var portifolioBalance: Double! 
    var families: [Family]! 

    required init?(map: Map) {} 

    public func mapping(map: Map) { 
     portifolioBalance <- Double(Decryptor.decrypt(map["pointsBalance"])) 
     families <- map["fam"] 
    } 
} 
+0

はい、それは可能です。あなたのコードを実行しようとしましたか? OMの '< - '演算子のソースは次のとおりです。https://github.com/Hearst-DD/ObjectMapper/blob/master/Sources/Operators.swift – nathan

+0

実際には、私のコードは機能しません。 Double型を予想型に変換することはできません。 –

+0

メソッドが返すものによっては可能です。関連するコード(少なくともDecryptor.decrypt'の宣言)を投稿してください。 '< - 'はマップを期待しています – nathan

答えて

1

データ復号化を達成するには、いくつかの方法があります。 ObjectMapperは、マッピング中にデータ変換を処理するプロトコルTransformTypeを提供します(reference)。

トランスフォーマー:

import ObjectMapper 

class PointsTransform: TransformType { 
    typealias Object = Double 
    typealias JSON = String 

    func transformFromJSON(_ value: Any?) -> Object? { 
     guard let encoded = value as? String 
      else { return nil } 

     // TODO: Replace with decoding logic 
     return 239_584.938 
    } 

    func transformToJSON(_ value: Object?) -> JSON? { 
     guard let decoded = value 
      else { return nil } 

     return "\(decoded)" 
    } 
} 


モデル:

class PosicaoConsolidada: Mappable { 
    var portifolioBalance: Double! 
    var families: [Family]! 

    required init?(map: Map) {} 

    public func mapping(map: Map) { 
     portifolioBalance <- (map["pointsBalance"], PointsTransform()) 
     families <- map["fam"] 
    } 

} 
関連する問題