꿀똥벌레
꿀똥벌레 개발 블로그
꿀똥벌레
전체 방문자
오늘
어제
  • 분류 전체보기 (90)
    • JAVA (17)
    • SPRING (14)
    • Elasticsearch (4)
    • GRADLE (2)
    • HTML, CSS (0)
    • JAVASCRIPT (0)
    • GIT (1)
    • Vue.js (1)
    • server (1)
    • Python (0)
    • IT리뷰 (0)
    • 인프라 (6)
    • IOS (21)
    • 디자인패턴 (20)
    • Kafka (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • springintegration
  • mappings
  • 스프링 인테그레이션
  • SWIFT
  • Index
  • elasticsearch
  • persistence connection
  • 스프링 인티그레이션
  • spring integration
  • spring
  • Index Template
  • 엘라스틱서치
  • 인덱스 템플릿
  • connectionRequestTimeout
  • KEEPALIVE
  • java
  • maxConnPerRoute
  • ES
  • persistent connection
  • maxConnTotal

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
꿀똥벌레

꿀똥벌레 개발 블로그

IOS

ObservableObject 와 Codable 같이 사용하기

2022. 12. 31. 15:11

ObservableObject 와 Codable을 같이 채택하면 오류가 발생 한다.

Type 'TodoItem' does not conform to protocol 'Decodable'
Type 'TodoItem' does not conform to protocol 'Encodable'

@Published 프로퍼티 래퍼를 사용하면 Published 로 래핑되는데, 해당 래퍼는 Codable을 채택하고 있지 않다.

따라서 Codable을 채택하도록 extension을 적용한다.

//PublishedWrapper라는 클래스를 선언 후, Published형 타입을 받아 @Published에 저장한다.
private class PublishedWrapper<T> {
    @Published private(set) var value: T

    init(_ value: Published<T>) {
        _value = value
    }
}

//PublishedWrapper를 통해 Endcodable, Decodable 에서 값 접근을 하기 위해 Published를 extension 해준다.
extension Published {
    var unofficialValue: Value {
        PublishedWrapper(self).value
    }
}

//decode 시 Published<Value>.init을 실행해주며 디코딩 값을 Published로 감싸도록 한다
extension Published: Decodable where Value: Decodable {
    public init(from decoder: Decoder) throws {
        self.init(wrappedValue: try .init(from: decoder))
    }
}

//encode 채택 후 구현 시 Published<Value> 형 값이 아닌, unofficialValue 값(실제 값)으로 인코딩 해준다.
extension Published: Encodable where Value: Encodable {
    public func encode(to encoder: Encoder) throws {
        try unofficialValue.encode(to: encoder)
    }
}
저작자표시 (새창열림)

'IOS' 카테고리의 다른 글

SwiftUI ViewBuilder란  (0) 2023.02.17
Swift GCD  (0) 2023.02.02
Swift enum  (0) 2022.12.31
Swift 에러 핸들링 (try, catch, throw, throws, do)  (0) 2022.12.28
UIKit 커스텀 애니메이션  (0) 2022.12.20
    꿀똥벌레
    꿀똥벌레
    개발자 꿀똥벌레 입니다.

    티스토리툴바