Swift 3.0의 Range에 대해

2016-09-01
8 Views

Swift 3.0이 나오면서 Range에 대한 것이 좀 많이 바뀌었다. 이에 따라 Xcode 8 Beta6기준으로 확인해 보았다.

닫힌 간격

Swift 2.x의 Range는 열린 구간만의 표현으로 되어 있지만, Swift 3.0에서는 닫힌 간격의 구현이 추가되었다.

위 코드에서 초기화하면 아래와 같은 차이가  있다. Swift 3.0부터는 닫힌 간격이 구현된 사양 변경에 따라 startIndex, endIndex실행형태가 바뀌었다. 이전까지는 닫힌 사이에서도 열린 구간에서도 Range<T>의 T는 얻을수 있었지만, Swift 3.0에서 ClosedRangeIndex<T>라는 형태의 구조로 리턴된다.

  • 형: Range<Int> => CountableClosedRange<Int>
  • 값: 1..<11 => 1…10
  • count: 10 => 10
  • startIndex: 1 => ClosedRangeIndex<T>
  • endIndex: 11 => ClosedRangeIndex<T>
  • upperBound: – => 1
  • lowerBound: – => 10

ClosedRangeIndex<T>에 대한 설명을 여기를 참고하자.

열린 구간

열린 구간은 형의 변경만으로 초기화된 값이나 얻을 수 있는 값을 변경하지 않는다.

  • 형: Range<Int> => CountableClosedRange<Int>
  • 값: 1..<10 => 1..<10
  • count: 9 => 9
  • startIndex: 1 => 1
  • endIndex: 10 => 10
  • upperBound: – => 1
  • lowerBound: – => 10

Countable이 아닌 Range

주의해야할 점은 같은 형명도 Swift 3.0의 Range가 Sequence프로토콜을 지키지 않도록 되어 있어 for-in과 forEach에서 사용할 수 없게 되어 있다.

 

 

Facebook Comments

You may be interested

Xcode 기능 확장(Extension) 제거하기
Xcode
shares3 views
Xcode
shares3 views

Xcode 기능 확장(Extension) 제거하기

MJ Kim - 3월 18, 2017

Mac에서 Xcode Source Editor Extension등의 기능확장을 사용하다보면 디버깅시 시스템 환경 설정의 확장이 앱에 등록되는 경우가 있다. 계속해서 목록이 남아 있기…

iOS App Store Review(앱 심사약관) 번역
Swift 3.0
shares112 views
Swift 3.0
shares112 views

iOS App Store Review(앱 심사약관) 번역

MJ Kim - 3월 15, 2017

App Store Review를 번역했다. 사실 이번에 좀 애매한 리젝을 당해서 그걸 이해하고자 정리해본다. 원문링크: https://developer.apple.com/app-store/review/guidelines/ 1. 이약관은? 1.1 앱 개발자로서 프로그램의…

Raspberry Pi 타이머 On/Off 전원제어모듈 RPi1114-Raspberry Pi
IoT by Raspberry Pi
shares8 views
IoT by Raspberry Pi
shares8 views

Raspberry Pi 타이머 On/Off 전원제어모듈 RPi1114-Raspberry Pi

MJ Kim - 3월 04, 2017

RPi1114-Raspberry Pi전원제어 모듈이 있다. 이 제품은 40Pin GPIO핀헤더에 연결하여 사용하는 모듈로 Cortax-M0마이크로컨트롤러 LPC1114를 내장하고 Raspberry Pi의 시작과 정지 순서등을 프로그래밍할…