💡 싱글톤 패턴
클래스는 어디서든 인스턴스 생성을 할 수 있다
init이 internal로 선언되어 있기 때문
아무 곳에서나 생성이 되지 않게 하기 위해 private으로 접근 제어 수준을 높이자
💡 convenience init
searchBar, button 등은 왜 초기화 할 때 frame 지정을 안해줘도 동작이 될까?
초기화 구문을 구현할 때 convenience를 붙인다면
디폴트 값을 지정해줄 수 있다. 초기화 시 매개변수를 안보이게
내부적으로 디폴트 값이 구현되어 있고, 초기화 시 디폴트 값으로 초기화를 한다.
💡 webView
웹 뷰에서 네비게이션 컨트롤러가 처음에는 투명, 스크롤 하면 불투명
✅ NavigationBar Custom
스크롤x / 스크롤 내렸을 때
navigationController?.navigationBar.standardAppearance = appearance
스크롤x / 스크롤 내렸을 때
navigationController?.navigationBar.scrollEdgeAppearance = appearance
두가지를 다 적용하면 스크롤을 수행할 때와 스크롤이 멈춰있을 때 모두 적용이 된다.
→ 네비게이션 바가 웹뷰 화면을 가림
navigationController?.navigationBar.isTranslucent = false
네비게이션 바를 숨기는 시점과 방식을 지정하는 다양한 방법이 있다
✅ 웹 뷰 레이아웃 잡기
웹 뷰를 초기화 후 addSubview를 해야 한다.
웹 뷰를 addSubview를 하면 런타임 오류가 난다.
초기화를 해주지 않아서!
var webView = WKWebView()
💡 hitTest
alpha
뷰의 alpha 레벨이 0.01보다 낮으면 뷰의 제스처가 무시가 될 수 있다.
Responder Chain 형식으로 사용자가 클릭한 위치가 어디인지 찾는다.
hittest 기준으로 사용자가 선택한 위치를 찾아 해당 위치가 textfield인지 button인지 찾는다.
firstResponder → 클릭하지 않았지만 명시적으로 특정 위치에 반응을 보내준다.
resignResponder → 뷰를 더이상 반응할 필요가 없을 때 responder를 끊어낸다.
뷰가 나타날 때 SearchBar에 커서를 시작
searchBar.becomeFirstResponder()
searchBar의 입력 상황이 끝남을 명시
resignFirstResponder()
→ delegate 연결 필요
💡 URLSession
1. 환경설정
- shared session
- default session
- ephemeral session
- background session
2. 요청 / 응답 리소스
task
- data task
- upload task
- download task
- stream task
리소스의 양에 따라 사용
resume → 네트워크 통신을 시작하도록 하는 트리거 역할
3. response 받는 방법
- Completion Handler
- task 다 끝나고 실행, 단 한 번만 실행 됨
- Session Delegate
- 최초 응답, 중간 과정 응답
- progress bar 등 진행률을 다룰 수 있다.
- 여러 이미지를 한 번에 받을 때 로드 상황을 보고싶을 때
shared session은 completion handler만 사용 가능하다 session delegate로 응답 받는 것이 불가능함
✅ session delegate
configuration 설정 메서드
session delegate를 사용하기 때문에 shared session은 사용 불가!
session = URLSession(configuration: .default, delegate: self, delegateQueue: .main)
delegate
session.delegate = self
코드가 매개변수로 들어간다.
⇒ 프로토콜 호출하기
session에 URLSession.shared가 들어간다.
-> completion handler 방식
-> session delegate 방식
➡️ completion handler 방식 보다 session delegate 방식이 코드가 좀 더 간단해진다.
요청 방식에 따라 호출할 delegate protocol이 다르다.
'iOS > 🌱 SeSAC' 카테고리의 다른 글
23.09.01 금 (0) | 2023.09.01 |
---|---|
23.08.31 목 (0) | 2023.09.01 |
23.08.29 화 (0) | 2023.08.31 |
23.08.28 월 (0) | 2023.08.31 |
23.08.25 금 (0) | 2023.08.31 |