반응형
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` 함수를 호출해야 하는 등의 복잡한 작업이 필요할 수 있습니다. 따라서, 이 방법을 사용할 때는 주의하여야 합니다.
반응형
'iOS > 코드조각' 카테고리의 다른 글
[iOS, Swift] 싱글턴 구현 (0) | 2023.03.23 |
---|---|
[iOS, Swift] Any to String 형변환 (0) | 2023.03.22 |
[iOS, Swift] UILabel Highlight 효과주기 (0) | 2023.03.19 |
[iOS, Swift] UILabel 여러 줄 표현하기 (0) | 2023.03.18 |
[iOS, Swift] UILabel 밑줄 추가하기 (0) | 2023.03.17 |