티스토리 뷰
오늘은 스위프트의 프토토콜 중 하나인 Sequence에 대해서 알아보겠습니다.
Sequence는 꽤 중요한 프로토콜이라고 생각합니다.
Array 타입을 사용할 때 대부분의 기능을 이 프로토콜이 제공할 뿐만 아니라
map, filter같은 것도 이 프로토콜에 정의 되어 있습니다.
애플문서는에는 다음과 같이 언급되어 있습니다
"요소에 순차적으로 반복 접근 할 수 있는 타입"
조금 더 살펴보자면
시퀀스는 한 번에 하나씩 단계별로 수행할 수 있는 값 리스트이고
시퀀스 요소로를 반복하는 가장 일반적인 방법은 for-in 이라고 합니다.
그리고 그렇게 for-in을 사용하면 시퀀스에 특정 값이 포함되어 있는지 확인할 수도 있죠.
또한 시퀀스의 끝에 도달할 때까지 각 요소를 테스트할 수 있죠
그리고 사용자가 커스텀 시퀀스를 만들려고 하면 두 가지 경우가 있습니다.
첫째 makeIterator 메서드를 구현하거나,
둘째 유형 그 자체가 Iterator로 작동할 수 있으면
Sequence, IteratorProtocol를 채택하고 그 요구 사항을 구현하는것으로 만들 수 있습니다.
왜냐하면 그 두 프로토콜을 채택하면 makeIterator함수가 기본적으로 제공되기 때문입니다.
조금 Deep하게 보자면 애플의 Sequence 구현체의 일부를 조금만 살펴보면 (여기서 볼 수 있습니다)
다음과 같이 구현 되어있습니다.
public protocol Sequence {
associatedtype Element where Self.Element == Self.Iterator.Element
associatedtype Iterator : IteratorProtocol
func makeIterator() -> Self.Iterator
Elemnet 와 Iterator 두 개와 Iterator를 만드는 makeIterator함수로 구현되어 있는 것을 볼 수 있습니다.'
이 쯤되니 IteratorProtocol이 뭐하는 프로토콜인지 궁금해지네요.
한 번 살펴보도록하겠습니다.
이 프로토콜의 애플 문서를 살펴보면 한 번에 하나씩 시퀀스 값을 제공하는 타입입니다.
아직 감이 안오니 계속 보도록 하겠습니다.
아까까지 우리가 살펴본 Sequence프로토콜이랑 밀접한 관련이 있다고 하네요.
Sequence가 아까 구현부에서 봤듯이 Iterator를 생성하고 요소에 대한 엑세스를 제공했다면
이 프로토콜은 반복 과정을 추적하고 시퀀스를 진행하면서 한 번에 하나의 요소씩 반환한다고 합니다.
그러므로 Sequence의 반복자를 직접 사용하면 for-in을 돌리는 것과 같은 효과를 볼 수 있다고 하네요.
자 이 쯤 읽었으니 IteratorProtocol도 내부가 어떻게 생겼는 지 한 번 보도록하겠습니다 (아까 시퀀스 문서에 있습니다)
public protocol IteratorProtocol {
associatedtype Element
mutating func next() -> Element?
}
이렇게 구현되어 있습니다.
Iterator가 반환하는 Element랑 다음 요소를 반환하는 next() 함수도 되어있습니다.
또한 next함수는 리턴값이 옵셔널이기때문에 저 함수가 nil을 리턴하면 마지막인 것으로 체크하게 됩니다
'Swift&IOS' 카테고리의 다른 글
날짜 비교하기 (0) | 2019.12.24 |
---|---|
[AutoLayout] FirstBaseLineAnchor & LastBaseLineAnchor (0) | 2019.12.22 |
MVC(Model-View-Controller)? (0) | 2019.10.23 |
Swift의 메모리 관리 - ARC 001 (0) | 2019.10.21 |
iOS13 바뀐 UIModalPresentationStyle에 관해서.. (0) | 2019.10.02 |
- Total
- Today
- Yesterday
- Queue
- 콤바인
- UIViewControllerRepresentable
- Apple
- CombineLatest
- ErrorHandling
- AutoLayout
- 알고리즘
- 스유
- 스택뷰
- combine
- MVC
- BBIK
- SEQUENCE
- 텔큐온
- iOSCombine
- 결합연산자
- swift
- compactMap
- 유니온파인드
- 스위프트
- 자료구조
- 현업이그리운
- programmers
- Just
- 삨
- 스위프트유아이
- replaceNil
- SwiftUI
- ios
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |