2017-09-04 5 views
0

ObjectMapper으로 매핑되는 클래스가 있습니다. 과거에는 매핑이 정상적으로 작동했지만 프로젝트 아키텍처가 변경되어 Double 인 웹 서비스 반환 필드가 암호화 된 값인 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의 선언). '<-'는 Map을 기대합니다 – 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"] 
    } 

}