210520 Thu

3113 단어 ResultResult

1. 첫 번째 학습 내용: Result

Generic Enumeration

Result

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를 제네릭으로 만들면
재사용성이 올라간다
비슷한 메서드를 만들지 않아도 된다.

2. 두 번째 학습 내용: Unit Testing URLSession using URLProtocol

Step1 테스트

  • 가상의 API에 접근한다고 가정했을 때 서버에서 가져온 데이터가 json 데이터와 일치하는지 여부를 확인
  • 테스트에서 requestHandler는 서버 역할
  • URLRequest를 받은 다음에 (가상의) 응답과 데이터를 받음
  • 이후 requestData(가지고 있는 API 데이터)와 responseData(통신된 값)을 비교하여 일치 여부를 확인

제임스 레슨

똘똘한 제임스가 레슨해줬다 👍

URLSession

Types of URL Sessions

  • singleton shared session
  • default session (환경 설정 해줄 수 있음), delegate한테 위임 가능
  • Ephemeral sessions (caches, cookies, credentials 남기지 않음)
  • Background 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? 물음표 붙임

좋은 웹페이지 즐겨찾기