2016-07-04 1 views
2

저는 Swift에 익숙하지 않고 iOS (iOS> = 8) 프로젝트에서 JSON 문자열로 객체 구조를 직렬화해야합니다. 그래서 ObjectMapper 라이브러리 (Cocoapod와 통합)를 사용하기로 결정했습니다.Swift 및 ObjectMapper에서 상속을 사용하는 방법은 무엇입니까?

하지만 내 문제는 구조는 다음과 같습니다.

ObjectA는 자식 변수의 목록을 인스턴스 변수에 저장된 배열로 가질 수 있습니다. 인스턴스 배열에 저장할 수있는 객체는 ObjectB 및 ObjectC와 같이 여러 유형이 될 수 있습니다. 따라서 GSON을 사용하는 Java에서 InterfaceD를 만들고 클래스를 구현하고 ObjectA 저장소 InterfaceD 유형의 배열을 만들었지 만 Swift 객체 모델에서 빈을 결과로 가져 오는 방법을 파악할 수 없습니다 {} JSON 객체.

결과 JSON은 다음과 같아야합니다.

{"children":[ 
    {"type":"ObjectB", "value1":"foo"}, 
    {"type":"ObjectC", "value1":"bar", "value2":"baz"} 
]} 

나는이 두 항목이 서로 다른 구조를 가지고 있어야 objectA 및 ObjectC에서 직렬화 할 것을

{"children":[ 
    {}, 
    {} 
]} 

공지 얻을.

여러 번 시도했지만 막 다른 골목에 갇혀 있습니다. generics를 사용하여 Mappable 프로토콜을 배열 형식으로 사용하려고 시도했지만 고전적인 클래스 상속을 시도했지만 어느 것이 든 실패했습니다.

내가 어떻게이 문제를 해결할 수 있는지 생각해보십시오.

각 개체에 직렬화 함수를 추가하고 문자열을 재귀 적으로 검색하여 연결시킬 수 있다는 것을 알고 있습니다. 하지만 Alamofire가 이미 프로젝트에서 사용되었으므로 이미 성공적으로 사용하고 있으므로 JSON 시리얼 라이저를 직접 구현하는 것을 피하고 싶습니다. 또한 새 serializer를 구현하면 오류가 발생하기 쉽고 IMO 문제를 해결할 수있는 깨끗한 방법이 아닙니다.

고마워요.

답변

0

나는 결코 해결책을 찾지 못했지만 일시적인 해결책으로 모든 객체가 내 모든 값에서 사전을 만들어 냈습니다. 그런 다음 하위 개체 사전을 재귀 적으로 현재 사전 값으로 추가합니다. 프로토콜을 사용하도록 강요 한 각 객체에 toDict() 함수를 추가합니다. 결과 개체가 사전의 트리로만 만들어지면 ObjectMapper serialization이 잘 작동합니다.

관련 문제