decode는 Decodable 프로토콜을 준수하는 타입을 대상으로 동작하는 Operator에요.
Data 타입을 원하는 형식(JSON, Plist)으로 디코딩할 수 있어요.
JSONDecoder()
, PropertyListDecoder()
처럼 TopLevelDecoder 프로토콜을 채택한 클래스로 encoding 해요.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)