Generic Enumeration
A value that represents either a success or a failure, including an associated value in each case.
result는 뭘로 받을지 타입을 정해야함
func fetchItemListData(completion: @escaping(_ result: Result <MarketItemList, Error>) -> Void) {
MarketItemList가 바뀔 때마다 다른 fetchItemListData 메소드가 필요함
MarketItemList를 제네릭으로 만들면
재사용성이 올라간다
비슷한 메서드를 만들지 않아도 된다.
똘똘한 제임스가 레슨해줬다 👍
URLSession
Types of URL Sessions
URLProtocol에서는 처리하는거를
URLProtocol subclass가 함
이거랑 비슷하게
Mock Protocol을 만듦
가상의 URLProtocolClient에게 전해줌
custom API를 하나 만듦
저장하고 retrieve할 수 있음 protocol-specific request data를
데이터 테스크에서 가져오면
URLResponse를 만들 수 있음
creating protocol objects
canInit
canonicalRequest (canonical: 적합한) → 보낸 request가 적합한건지 판단
startLoading
requestHandler → 서버 역할을 함
: URLRequest를 받은 다음에 (가상의) 응답과 데이타를 반환
handler를 만들어서
옵셔널이니까 guard let을 해주고
request handler가 throws니까
do문을 써가지고
handler를 통해서 리퀘스트를 받은 다음에
response, data랑 같은지 확인
requestHandler가 throw를 하니까
do let에서 handler를 try함
client = 커뮤니케이션 하는 애
data = 옵셔널 타입 (Data?)으로 지정
guard let data = data 확인
do catch문 쓴 이유
→ 에러가 있으면 catch에서 걸러내겠다
catch가 없으면
try 했는데 잘 안받아질 경우를 대비해서
try? 물음표 붙여짐
handler(request)를 통해서 response, data를 받으려고 했는데
문제가 생기면
nil값을 반환할거야
do catch를 안쓰면 이렇게 try? 물음표 붙임