24일차 수업을 정리한 글입니다.
Learned
iOS Pagenation 구현 방법
1) UITable(Collection)View의 willDisplay 메서드
- 특정 인덱스의 셀이 화면에 보여지기 바로 직전에 호출되는 메서드
- 마지막 데이터를 가진 셀이 보여질 때 데이터를 새로 가져올 수 있음.
2) UIScrollView의 scrollViewDidScroll 메서드
- 스크롤뷰를 상속받는 테이블뷰와 컬렉션뷰에서도 스크롤뷰의
델리게이트 메서드를 사용할 수 있다. - 현재 스크롤의 위치가 특정 지점에 도달했을 때 데이터를 새로 가져올 수 있음.
func scrollViewDidScroll(_ scrollView: UIScrollView) {
// 현재 스크롤이 더 이상 스크롤이 되지 않는 지점에 위치하게 될때
if scrollView.contentOffset.y >= scrollView.contentSize.height - scrollView.visibleSize.height - 20 {
// 데이터 가져오기
}
}
3) UITable(Collection)ViewDataSourcePrefetching Protocol
- iOS 버전 10 이상부터 지원
- 보여질 셀을 미리 준비할 때 호출되는 델리게이트 메서드를 가짐.
- 셀이 보이기 전에 셀에 필요한 데이터를 미리 가져올 수 있으므로
데이터 로딩 시간을 줄이고 스크롤이 향상되는 효과 - 미리 준비할 셀은 사용자의 스크롤 동작에 따라서 시스템이 자동으로 판단하고
셀을 준비할 필요가 없을 때 호출되는(준비 취소) 메서드도 존재함.
클로저
1) 외부 함수와 내부 함수
- 함수 내부에 함수가 정의된 구조에서 가장 바깥 함수를 외부 함수,
내부에 정의된 함수를 내부 함수라고 한다. - 내부 함수는 외부 함수와 생명주기를 같이 하며
외부에서 호출할 수 없으므로 은닉성이라는 특징을 가짐. - 만약 외부 함수에서 내부 함수를 반환한다면
외부 함수가 종료되더라도 내부 함수를 사용할 수 있게된다.
2) 캡쳐(Capture)
- 외부 함수의 지역 변수나 상수를 사용하는 내부 함수가 반환되어
외부에서 사용될 때 클로저가 특정 변수나 상수를 캡쳐한다고 한다. - 값을 캡쳐하면 외부 함수가 사라져도 캡쳐된 값을
클로저에서 계속 사용할 수 있다. - 내부 함수로 존재한다고 해서 클로저가 생성되는 것은 아니며
클로저가 실제로 호출이 될 때 생성된다.
func makeIncrementer(forIncrement amount: Int) -> () -> Int {
var runningTotal = 0
func incrementer() -> Int {
runningTotal += amount
return runningTotal
}
return incrementer
}
let incrementByTen = makeIncrementer(forIncrement: 10)
incrementByTen()
// 값으로 10을 반환합니다.
incrementByTen()
// 값으로 20을 반환합니다.
incrementByTen()
// 값으로 30을 반환합니다.
// incrementByTen이라는 클로저에서 runningTotal과 amount를
// 캡쳐하고 있기 때문에 makeIncrementer 함수가 종료되도 값을 사용할 수 있다.
3) 클로저의 표현
- 이름이 있고 캡쳐할 값이 없는 클로저를 전역 함수라고 한다.
- 이름이 있고 값을 캡쳐할 수 있는 클로저를 중첩 함수라고 한다.
- 인라인 클로저: 함수로 따로 정의된 형태가 아니라 인자로 들어가있는 클로저
- 트레일링 클로저: 마지막 인자가 클로저일 때 사용
Learning
- 스위프트 공식 문서 클로저 읽고 정리하기
이상입니다.
'TIL' 카테고리의 다른 글
[Sesac IOS] 26~27일차 TIL (0) | 2022.08.09 |
---|---|
[Sesac IOS] 25일차 TIL (0) | 2022.08.07 |
[Sesac IOS] 23일차 TIL (0) | 2022.08.04 |
[Sesac IOS] 22일차 TIL (0) | 2022.08.03 |
[Sesac IOS] 21일차 TIL (0) | 2022.08.01 |