Combine 사용법1

kyle Kim·2021년 7월 18일
0
post-thumbnail

Swiftui에서 data가 변할때 view를 변화시켜줘야하는데 그때 사용하는것이 Combine이다. Combine은 RxSwift와 같은 기능을하고 API에서 받아오는 데이터도 mapping이 가능하다. 간단히 구성은 Publisher와 Subscriber로 나뉘어져있다.

Publisher - API Call을 하기위해서 publisher가 아래와 같이 필요하다

let publisher = URLSession.shared.dataTaskPublisher(for: url)

sink - receiveCompletion에서 나오는 completion을 switch로 success나 failure로 받을 수 있다. 그리고 receiVable에서 value를 불러올 수 있고, 이 value에 closure를 사용하여 decoder를 넣을 수 있다. 여기서 cancellable로 return하는 이유는 task가 완료되면 자동으로 취소되기 때문이다.

let cancellable = publisher.sink(
    receiveCompletion: { completion in
        print(completion)
    },
    receiveValue: { value in
        print(value)
    }
)

map - API call로 받는 response를 새로운 형태의 form으로 바꿔주는 역할을 한다.

let dataPublisher = publisher.map(\.data)

decode - 위의 sink에서 언급한 방식처럼 사용할 수 있지만 decode를 바로 사용할 수도 있다. map뒤에 이어서 사용하면 된다.

.decode(
        type: Repository.self,
        decoder: JSONDecoder()
    )

receive - background Thread에서 실행되던 API Call을 mainThread로 event를 방출해주는 역할을 한다.

.receive(on: DispatchQueue.main)

기본적인 Combine 사용법을 알아봤다. 다음 글에서 Combine의 HTTP Request 방법 등을 알아보도록 하겠다.

profile
가고일(gagoil)의 개발일지

0개의 댓글