2017-12-23 9 views
-2

코드 가능 구조체가 있고 속성에서 반복하기 위해 [String : Any] 사전을 만들고 싶습니다.JSON 직렬화 된 사전에 데이터 및 날짜 캐스팅

var dictionary: [String: Any] { 
    return (try? JSONSerialization.jsonObject(with: JSONEncoder().encode(self), options: [])) as? [String: Any] ?? [:] 
} 

사전을 반복하고 '모두'를 캐스팅하려고하면 '데이터'및 '날짜'와 같은 유형이 작동하지 않습니다. 캐스팅은 'String', 'Int'및 'Double'에서만 작동합니다. '데이터'와 '날짜'를 어떻게 든 전송할 수 있습니까? 미리 감사드립니다.

+0

특정 유형의 구조체가있는 경우 왜 지정되지 않은 사전으로 변환하려고합니까? JSON이 그들을 지원하지 않기 때문에'Data'와'Date'는 작동하지 않습니다. 'Date'와'Data'를 지원하는'PropertyListEncoder'를 사용할 수 있습니다 – vadian

답변

1

JSON에는 날짜 또는 바이트 시퀀스 (데이터)에 대한 사전 정의 된 표준 인코딩이 없습니다.

JSONEncoder 및 JSONDecoder는 모두 dateEncodingStrategydataEncodingStrategy 속성을 사용하며 JSON에서 사용중인 형식과 일치하도록 설정할 수 있습니다.

+0

맞습니다. 짜증나는 부분은 날짜 형식 문자열을 설정하는 방법을 알아내는 것입니다. 놀이터에 들어가서 작동하도록 권장하고이 참조를 사용하십시오 : [OS X 10.9 및 iOS 7+ 용 유니 코드 날짜 형식] (http://www.unicode.org/reports/tr35/tr35-31/tr35- dates.html # Date_Format_Patterns). – CommaToast

+0

@CommaToast https://stackoverflow.com/questions/46458487/how-to-convert-a-date-string-with-optional-fractional-seconds-using-codable-in-s/46458771?s=4|0.0000 # 46458771 –