2017-10-03 1 views
1

Swift 4 이전에는 코드가 완벽하게 작동했지만 간단한 JSON 파일을 파싱 중이므로 모든 것을 내 모델 클래스에 매핑하고 있습니다.Swift 4 - JSON을 구문 분석하는 동안 ObjectMapper와 관련된 문제

내 예제 코드는 다음과 같습니다.

우선 json 파일을 가져옵니다.

if let path = Bundle.main.path(forResource: "myFile", ofType: "json") { } 

그럼 구문 분석 할 수 있습니다.

do { 
     let jsonData = try Data(contentsOf: URL(fileURLWithPath: path), options: NSData.ReadingOptions.mappedIfSafe) 
     let json = JSON(data: jsonData) 

     if let jsonZones = json["zones"].array { 
      let parsedZones = Mapper<Zone>().mapArray(JSONObject: jsonZones.description) 
      parsedZones?.forEach({ (element) -> Void in 
       // Do stuff... 
      }) 
} 

지금은 당신이

class Zone: Object, Mappable { 

    @objc dynamic var code: String? 

    required convenience init?(map: Map) { 
     self.init() 
     mapping(map: map) 
    } 

    func mapping(map: Map) { 
     code <- map["code"] 
    } 

당신은 또한이 필요합니다 내 영역 클래스 표시 할 수 있습니다 내 내 JSON 파일을 보려면 :

{ 
    "info": { 
     .... 
     .... 
    }, 
    "zones": [{ 
     "code": "EN" 
    }], 
} 

parsedZones이 전무하기 때문에 나는이 충돌하고있다. 나는 nil을 검사 할 수 있지만 Swift 3에서 작업하고 Swift 4로 변환하기 전에 아무것도 수정하지 않았다는 것을 알고있다. JSON 파일에 대해서는 nil이 아니어야한다.

도움이 될만한가 있습니까?

+0

'스위프트 4 JSONEncoder/Decoder'가 '거의 사용되지 않는 ObjectMapper'한다) – vadian

+0

당신이 더 구체적인 @vadian 될 수 있을까? 저는 매우 흥미가 있습니다 – Balanced

+1

Swift와 Foundation의 새로운 점에 관한 WWDC 비디오를보십시오. – vadian

답변

0

이 같이 사용해야합니다 :

if let jsonZones = json["zones"].arrayObject { 
    let parsedZones = Mapper<Zone>().mapArray(JSONObject: jsonZones) 
    parsedZones?.forEach({ (element) -> Void in 
     print(element.code) 
    }) 
} 
관련 문제