2017-06-20 61 views
0

使用ObjectMapperhttps://github.com/Hearst-DD/ObjectMapper),我在做JSON轉換爲Swift對象。在訪問user.profession時,應用程序崩潰。基本上,我不知道如何解析模型中的另一個可映射的對象與相同的JSON映射根節點我認爲,我做錯了。我無法在任何地方找到相同的文檔。從根節點映射嵌套對象不起作用

JSON詞典:

​​

型號:

struct User: Mappable { 
    var name: String! 
    var url: URL! 
    var profession: Profession! 
    init(_ map: Map) { 
    name <- map["name"] 
    url <- map["url"] 
    profession <- map // FIXME: It's not working. Find out what we do here is right/wrong 
    } 
} 
struct Profession: Mappable { 
    var company: String! 
    var designation: String! 
    init(_ map: Map) { 
    company <- map["company"] 
    designation <- map["designation"] 
    } 
} 

我所做的:

let user = Mapper<User>().map(myJSONDictionary) 
print(user.profession.company) //FIXME: Crashes here 

任何幫助將不勝感激。

回答

1

由於profession模型它不直接包含在user json模型中,在這種情況下你不應該使用對象映射器<-運算符。相反,你應該初始化新的Profession對象直接從user映射功能

struct User: Mappable { 
    var name: String! 
    var url: URL! 
    var profession: Profession! 

    init(map: Map) { 

    } 

    mutating func mapping(map: Map) { 

     name <- map["name"] 
     url <- map["url"] 
     profession = Profession(map: map) 
    } 
} 

struct Profession: Mappable { 
    var company: String! 
    var designation: String! 

    init(map: Map) { 
     company <- map["company"] 
     designation <- map["designation"] 
    } 

    mutating func mapping(map: Map) { 
     company <- map["company"] 
     designation <- map["designation"] 
    } 
} 
+0

我試過了。但是,它調用'init(map:Map)',根本不調用'func mapping(map:)'。我實際上現在明確地映射。 :( 'profession = Mapper (context:map.context,shouldIncludeNilValues:false).map(JSON:map.JSON)' –