화면 전환 시 서버 통신
- 화면 전환 시 서버 통신 후 값 전달화면 전환할 때 응답을 받은 후 전환해야 하기 때문에 사용자 입장에서 불편함을 느낄 수 있음(속도)
- 통신에 실패할 시 얼럿 등의 메세지를 띄우는 대처 필요
- 화면 전환 후 viewDidLoad
- 통신 실패 화면을 준비하는 것이 필요하다
💡 URL Session
타임아웃 시간 걸기
let request = URLRequest(url: url!, timeoutInterval: 10)
error가 발생하지 않는다면 error 값은 nil일 것이다.
let result = try? JSONDecoder().decode(, from: data)
오류가 발생했을 때 result에 nil값이 들어가버리면 어디에서 문제가 발생했는지 알 수 없다.
let result = try! JSONDecoder().decode(, from: data)
runtime error 발생
오류를 대처하기 위해 do try catch문을 쓰는 것이 적합함!
✅ 데이터 응답 진행률
→ 총 데이터의 양은 content-length에 담겨 있음
총 데이터 크기 가져오기
서버에서 데이터 받을 때 마다 buffer에 추가해주기
data타입의 프로퍼티 생성 후 didSet 프로퍼티 활용하여 값이 추가될 때 마다 진행률을 계산
진행률 소수점 첫째자리까지 보여주기
String(format: "%.1f", result * 100)
리소스를 다 받았으면 이미지 보여주기
카카오톡 사진 다운로드: 다운로드 중에 다른 채팅방으로 넘어가면? 취소버튼?
api 통신 에러 핸들링
completionHandler에 nil 값이 들어오게 된다면 문제가 생긴 것
→ 구현 시 nil값을 받게 되면 alert창을 띄우는 등 에러에 대한 뷰를 구성하여 처리를 하도록 하자
api 통신이 완료되기 전에 collection view가 만들어진다.
네트워크 통신의 횟수가 많고 반복적이라면 호출할 때 마다 DispatchQueue에서 main에게 요청하기 보다는 completionHandler 내에서 DispatchQueue를 수행하는 것이 더 효율적일 것!
링크 기반으로 이미지를 보여주는 것은 네트워크 통신 과정이다.
링크를 데이터 타입으로 변환하는 과정은 용량이 클 때 시간이 오래걸릴 수 있기 때문에 글로벌 비동기 처리를 하도록 구현한다.
데이터 타입 변환이 끝나면 이미지를 보여주는 과정은 main이 처리하도록 한다.
네트워크 통신은 비동기 환경에서 해야한다.
데이터를 받거나 이미지 로드 등
'iOS > 🌱 SeSAC' 카테고리의 다른 글
23.11.01 수 (1) | 2023.11.01 |
---|---|
23.10.31 화 (0) | 2023.11.01 |
23.08.31 목 (0) | 2023.09.01 |
23.08.30 수 (0) | 2023.09.01 |
23.08.29 화 (0) | 2023.08.31 |