티스토리 뷰
안녕하세요. developer, 멍구입니다. 🤗
오늘은 Sequence protocol, 시퀀스 프로토콜을 채택하고 사용하는 법에 대한 애플 개발자 공식문서를 보도록 하겠습니다.
Conforming to the Sequence Protocol
Sequence 프로토콜 채택(준수) 및 사용법
어떠한 커스텀(Custom) 타입에 Sequence 프로토콜을 채택(준수) 해서 사용하는 것은 지난번 포스팅에서 돌아본 for-in 루프, constains(_:) 메서드 등의 기능 이외에 많은 유용한 연산기능들을 지원합니다.
만약 커스텀 타입에 Sequence 프로토콜을 채택하여 사용하기 위해서는 Sequence와 iterator(반복자)를 충분하게 반환하는 makeIterator() 메서드를 정의해 주는 것이 필요합니다.
// - makeIterator() 메서드는 Sequence의 값들 상의 반복자(Iterator)를 반환합니다. func makeIterator() -> Self.Iterator
makeIterator() 메서드의 구현은 필수입니다. 하지만 별도로 구현하지 않아도 Default로 해당 메서드를 지원합니다.
struct CountDown: Sequence, IteratorProtocol { var count: Int // 구조체 내의 값을 구조체 내부에서 변화시키는 경우, mutating 키워드를 사용해야 내부에서 변화시킬 수 있습니다. mutating func next() -> Int? { if self.count == 0 { return nil } // 해당 블록이 종료 될 때 count는 1 감소 시킵니다. defer { count -= 1 } return count } } let threeToGo = CountDown(count: 3) // result : 3, 2, 1 for index in threeToGo { print(index) }
위의 코드는 Sequence 프로토콜을 채택한 구조체인 CountDown 구조체를 보여주고 있습니다.
Sequence 프토토콜을 준수하면서 그 이점을 취하려면, makeIterator() 메서드가 정의되는 것이 필요합니다.
위에 CountDown 구조체에서 정의하고 있는 next 메서드는 IteratorProtocol을 준수하면서 구현해야하는 메서드입니다.해당 메서드는 다음 순회 간 반환되는 값을 정의하는데, count 변수 값이 0이 되면 nil을 반환하고 순회탐색을 종료하게 됩니다.
-> 즉, next의 끝에는 nil이 반환되게 됩니다.
이처럼 iterator 메서드의 커스텀 정의를 통해 사용자 입맛에 맞는 순회방식을 설정할 수 있습니다.
가령 위의 구조체는 3 -> 2 -> 1 -> END의 순회 방식을 갖으며 이에 따라 for-in 루프 순회간 값을 출력하게 됩니다.
Expected Performance
예상되는 성능
Sequence의 경우 한번의 방문 간 O(1)의 시간복잡도(Time Complexity)로 작업할 수 있도록 제공하고 있습니다. Sequence 프로토콜은 요소 접근에 대해 또다른 요구사항을 만들지 않습니다.
그렇기에, 모든 Sequence를 방문, 순회하는 작업의 경우 O(N)의 시간 복잡도를 갖고 있다고 보면 됩니다.
'iOS 개발 > 개발자문서 정보' 카테고리의 다른 글
iOS swift Collection, 컬렉션 특정 값, 범위 접근방법 (0) | 2020.06.22 |
---|---|
iOS swift Collection, 컬렉션 프로토콜 개요 (0) | 2020.06.21 |
iOS swift Sequence, 시퀀스 프로토콜 개요 및 특징 (0) | 2020.06.19 |
swift Set 자료구조, 시퀀스 컬렉션 연산 메서드(2) (0) | 2020.06.18 |
swift Set 자료구조, 집합 기본연산 메서드 정리 (0) | 2020.06.17 |
- Total
- Today
- Yesterday
- 프로토콜
- Protocol
- swift알고리즘
- swift string
- 알고리즘문제
- 부스트코스
- publisher
- 프로그래머스
- 컬렉션
- CoreML
- swift언어
- swift 문자열
- 백준swift
- createML
- SwiftUI
- 프로그래머스swift
- uikit
- 김프매매
- 알고리즘
- Swift 알고리즘
- swift 기초
- ios
- Collection
- 자연어처리
- 개발자문서
- 백준알고리즘
- swift
- swift reduce
- 스위프트
- swift문제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |