티스토리 뷰
Range
Range는 제네릭 구조체로, 반개방 상태의 간격을 표현하는 제네릭 구조체입니다. Range는 최저값을 포함하고, 최대값을 포함하지 않는 간격(A..<B)을 표현합니다.
Declaration
선언
Range에서 사용할 수 있는 제네릭 타입은 Comparable 프로토콜을 준수하는 타입이면 무엇이든지 가능합니다. 즉, Comparable한 타입의 범위를 표현할때 사용할 수 있습니다.
반개방 형태의 연산자, (..<) 를 통해 Range 인스턴스를 만들어 사용할 수 있습니다. 그 생성 예시는 아래와 같습니다.
위 코드는 0.0이상, 10.0미만의 값 범위를 가진 Range 인스턴스를 생성하는 예시입니다.
해당 Range 인스턴스에 특정 값이 포함되는지를 확인할 수 도 있습니다. 그 방법은 아래와 같습니다.
Range 인스턴스에서 접근가능한 contains 멤버 메서드를 통해서 해당 인자값이 Range 인스턴스 내에 포함되는지 유무를 Boolean값으로 판단할 수 있습니다.
Range인스턴스는 텅빈 범위 또한 표현할 수 있습니다. 가령, "0..<0" 와 같은 표현도 가능합니다. 해당 인스턴스는 어떠한 값도 포함하지 않는 범위가 됩니다. 단, Range 인스턴스에서 좌측 값이 우측 값보다 크면 컴파일 에러를 야기합니다.
Using a Range as a Collection of Consecutive Values
연속 값을 가진 컬렉션에 Range 활용하기
앞서 돌아보았던 Range 인스턴스를 사용할 수 있는 곳은 언제가 있을까요?
바로 연속적인 다수의 값을 가진 컬렉션 값의 특정 범위를 순회할 때가 있겠습니다. Integer Stride을 정의한 Strideable 프로토콜을 준수하는 컬렉션이라면 Range를 사용할 수 있습니다. 아래와 같이 컬렉션의 순회하고 싶은 범위를 지정해서 for 루프 문등에 활용할 수 있습니다.
위의 코드는 0..<array.count의 범위를 지정해서 컬렉션을 순회, 각 값을 출력하고 있는 코드입니다.
array 컬렉션의 크기는 곧 array.count이고, 첨자 접근가능한 최대 범위는 array.count-1이 되므로 즉, 0..<array.count는 array 컬렉션의 전제범위를 순회하는 것이 됩니다.
컬렉션의 전체 계수가능 범위를 반환해서 순회하는 방법으로는 0..<array.count 이 외에도 위의 코드 하단에서 볼 수 있듯이, 컬렉션의 indices 프로퍼티를 접근해서 사용하는 방법도 있습니다.
컬렉션의 프로퍼티, indices는 Range를 별도의 리터럴값 명시없이 해당 컬렉션의 전체 계수가능 범위를 표현할 수 있는 좋은 방법이 됩니다.
정수형 Int 타입과 달리, Float, Double 등의 부동소수점 타입은 그 자체가 Stride 타입이기 때문에, 위와 같은 정수형 범위로서 계산하며 사용할 수 없습니다. 만약 연속적인 부동소수점 값들의 순회가 필요하다면, 부동소수점의 순회를 사용하는데 목적을 두는 메서드, stride(from:to:by:), stride(from:through:by:) 메서드를 사용하시면 됩니다.
오늘은 컬렉션의 순회 등에 알게 모르게 사용하고 있는 Range 구조체에 대해서 알아보았습니다. 실전에서 자주 쓰이는 요소인만큼, 특성을 알아두면 좋을 것 같습니다. 🤗
'iOS 개발 > 개발자문서 정보' 카테고리의 다른 글
SwiftUI 문서, Scene 프로토콜 개요 알아보기 (0) | 2020.08.04 |
---|---|
애플 앱 개발 프레임워크, SwiftUI 알아보기 (0) | 2020.08.03 |
Swift 문법, String Literals 문자열 리터럴 사용법 (0) | 2020.08.01 |
Swift 문서, Strideable 프로토콜 및 stride 사용법 (0) | 2020.07.31 |
iOS 앱 생애주기 관리, UIApplicationDelegate 개요 (0) | 2020.07.30 |
- Total
- Today
- Yesterday
- 백준swift
- 알고리즘문제
- Collection
- ios
- 자연어처리
- 김프매매
- swift
- swift string
- 프로토콜
- swift 문자열
- Protocol
- SwiftUI
- swift 기초
- swift문제
- uikit
- 프로그래머스swift
- publisher
- swift알고리즘
- 부스트코스
- 스위프트
- 프로그래머스
- 알고리즘
- 컬렉션
- swift reduce
- 개발자문서
- createML
- 백준알고리즘
- swift언어
- CoreML
- 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 |