작년에 나는 Swift String Cheat Sheet라는 글을 썼는데, 이 글은 Swift 표준 라이브러리에서 더 복잡한 API중 하나를 어떻게 사용하는지 기억나게 해주었다. 이번 Swift3에서는 중요한 변화를 겪으면서 코드 마이그레이션을 힘들게 만들었따. 이것은 부분적으로 API 네이밍 가이드라인이 새로 바뀌면서, 컬렉션, 인덱스, 범위(Range)의 새로운 모델이 적용되었기 때문이기도 했다.
좋은 리네이밍
표준 라이브러이에서 새로운 API 가이드라인을 적용시키면 사용하고 있던 String에서 많은 프로퍼티와 메소드를 바꿔야한다. Xcode에서 이 작업을 어느정도 대신 해주기 때문에 그 모든 바뀐점에대해 언급하진 않겠다. 아래에는 일반적으로 바뀐것에 대한 방법을 알려준다.
문자열 초기화
표준 라이브러리는 String 생성자를 init(count: repeatedValue)에서 init(count: repeatedValue)로 바뀌었다. repeatedValue는 Charater 대신에 String으로 바뀌었는데, 더 유연하게 되었다.
upper/lower case로 변환하기
uppercaseString과 lowercaseString 프로퍼티가 이제 uppercased()와 lowercased() 함수로 바뀌었다.
조금 더 있다가 다른 바뀐 이름에대해 다룰것이다.
인덱스를 사용하여 컬렉션을 탐색하기
Swift3에 들어오면서 String에 가장 큰 영향을 준 변화 중 하나는 컬렉션과 인덱스의 새로운 모델이다. 고쳐 쓰기위해 String의 요소에 직접 접근할 수 없고 대신에 컬렉션에 있는 인덱스를 사용해야한다.
Swift3에서 각 컬렉션의 startIndex와 endIndex 프로퍼티는 바뀌지 않았다.
character에 있는 것을 원할때 character 프로퍼티를 생략할 수도 있따.
인덱스로 문자열을 탐색할 수 있도록 바뀌었다. 이제 successor(), predecessor(), advancedBy(n) 함수들은 없어졌다.
Swift3에서는 이제 같은 결과를 얻기 위해 index(after:), index(before:), index(_: offsetBy:)를 사용한다.
또한 end 인덱스를 넘어가버릴때 에러를 피하기위해 offset 한계를 정할 수도 있다. index(_: offsetBy: limitedBy:) 함수는 너무 멀리까지 가버리면 nil을 반환하는 옵셔널 반환 함수이다.
첫번째로 일치하는 요소(아래는 character이다)의 인덱스를 찾는다.
마지막으로는, 두 인덱스 사이의 거리를 계산해주는 메소드 이름이 바뀌었다.
범위(Range) 사용하기
범위는 Swift3에서 바뀌었는데, character에 시작 인덱스(lower bound)와 끝 인덱스(upper bound)를 가지고 있다고 가정하자.
upper와 lower 바운드로부터 범위를 생성하기 위한 생성자 전체
..<와 ... 연산자를 사용하면 더 쉽게 생성할 수 있다.
하위 문자열에 일치하는 문자가 있는지 확인하고 범위를 반환한다.
Playground
더 읽을거리
- Swift String Cheat Sheet
- SE-0006 Apply API Guidelines to the Standard Library
- SE-0065 A New Model for Collections and Indices
'Swift와 iOS > Swift News' 카테고리의 다른 글
[번역]스위프트3.1 새로운 것은 무엇인가? (0) | 2017.05.11 |
---|---|
[번역]스위프트 접근 제어에대한 생각들 (0) | 2017.05.08 |
[번역] Swift4 배포 과정 -swift.org (0) | 2017.04.01 |
[번역] Swift API 설계 가이드라인: 요약 (0) | 2017.02.02 |
[번역] Swift3.0과 Swift2.3 변화의 종합적 정리 (0) | 2017.01.01 |
WRITTEN BY
- tucan.dev
개인 iOS 개발, tucan9389
,