iOS/코드조각

[iOS, Swift] Object to Dictionary 형변환

검은참깨두유vm 2023. 3. 24. 18:52
반응형

iOS 15.5, Xcode 13.31, Swift 5, UIKit 환경에서 진행했습니다.

 

extension Encodable {
    // object to Dictionary
    var toDictionary: [String: Any]? {
        guard let object = try? JSONEncoder().encode(self) else { return nil }
        guard let dictionary = try? JSONSerialization.jsonObject(with: object, options: []) as? [String: Any] else { return nil }
        return dictionary
    }
}

 

let parameter = model.toDictionary

 

이 글에서는 Swift에서 Encodable 프로토콜을 확장하여 객체를 딕셔너리로 변환하는 방법을 알아보았습니다. 이 방법은 Alamofire와 같은 HTTP 통신 라이브러리를 사용할 때 유용하게 쓰일 수 있습니다.

위 코드에서 `toDictionary`라는 계산 프로퍼티를 사용하여 객체를 딕셔너리로 변환합니다. 이 프로퍼티는 `Encodable` 프로토콜을 채택한 객체에서 사용할 수 있습니다. 이후, `JSONEncoder`를 사용하여 객체를 JSON 데이터로 인코딩하고, `JSONSerialization`을 사용하여 JSON 데이터를 딕셔너리로 변환합니다.

만약 HTTP 통신을 할 때, 서버로 보낼 파라미터를 딕셔너리 형태로 만들고 싶다면, 위의 방법을 사용하면 됩니다. 객체를 딕셔너리로 변환하면, `Alamofire`의 `request` 함수의 파라미터로 쉽게 넘길 수 있습니다.

하지만, 이 방법은 조금 더 복잡한 객체의 경우, 예를 들어 객체 안에 다른 객체가 포함되어 있는 경우, 재귀적으로 `toDictionary` 함수를 호출해야 하는 등의 복잡한 작업이 필요할 수 있습니다. 따라서, 이 방법을 사용할 때는 주의하여야 합니다.

 

반응형