TIL

[Sesac IOS] 24일차 TIL

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