Swift 3.0의 Range에 대해

2016-09-01
21 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

페이지 로딩 위치에 따른 사용자 시선 유도
Swift 3.0
shares3 views
Swift 3.0
shares3 views

페이지 로딩 위치에 따른 사용자 시선 유도

MJ Kim - 4월 29, 2017

로딩되는 표시를 표시할 위치를 조금 고민해보면서 사용자경험(UX)를 개선하기 위함을 고려해서 정리해 본다. 로딩을 생각해보면 대부분 한가운데에 표시하면 된다고 생각하지만, Twitter…

iOS와 Android UX의 차이점
Swift 3.0
shares2 views
Swift 3.0
shares2 views

iOS와 Android UX의 차이점

MJ Kim - 4월 29, 2017

최근 필자가 iOS와 Android를 같이 개발하다보니 UX의 차이점을 기억하고자 정리해본다.  이를 정리하는 이유는 운영체제별로 차이점을 이해하고 그 차이점을 극복하기 위함이다.…

모바일 앱 아키텍처
Swift
shares26 views
Swift
shares26 views

모바일 앱 아키텍처

MJ Kim - 4월 22, 2017

이 내용은 나름대로 개발해본 내용을 토대로 정리해본 모바일 앱 아키텍처에 대한 내용이다. 이를 정리한 이유는 오래된 아키텍처부터 최근 아키텍처까지 정리해보고…