decode는 Decodable 프로토콜을 준수하는 타입을 대상으로 동작하는 Operator에요.

Data 타입을 원하는 형식(JSON, Plist)으로 디코딩할 수 있어요.

기능

사용

encode 글에서 사용한 코드를 재사용해볼게요.

.encode의 결과는 Data 형태이므로 이것을 그대로 .decode하면 정상적으로 구독되어야 해요.

struct User: Encodable {
  let name: String
  let age: Int
  let id = UUID()
}

struct DecodedUser: Decodable {
  let id: UUID
  let name: String
  let age: Int
}

let userPublisher = PassthroughSubject<User, Error>()

userPublisher
  .encode(encoder: JSONEncoder()) // 서버로부터 내려온 json 데이터라고 가정
  .decode(type: DecodedUser.self, decoder: JSONDecoder())
  .sink { completion in
    print(completion)
  } receiveValue: { value in
    print(value)
  }
  .store(in: &cancellables)

let user = User(name: "russell", age: 87)

userPublisher.send(user)

// 결과
DecodedUser(id: 84BEA0CB-8ECF-4CFB-98B7-9B67F44B6EA3, name: "russell", age: 87)