-
[레인스톤 iOS] 스위프트 easy하게 배워볼까? - 문자열과 문자(2)Swift 기초문법 2022. 2. 3. 13:33반응형
안녕하세요!
iOS개발자로 일하고있는 레인스톤입니다:)
오늘은 문자열과 문자 2편!
유니코드부터 문자열 카운팅, 문자열 인덱스까지 알아보겠습니다.
유니코드
유니코드는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 국제 표준입니다.
유니코드 스칼라
swift의 네이티브 문자열 타입은 유니코드 스칼라 값으로 만들어졌습니다.
하나의 유니코드는 21비트의 숫자로 구성되어 있습니다.
let a = "\u{0061}" let chick = "\u{1F425}" print(a) // a print(chick) // 🐥
자모그룹의 확장
유니코드를 결합하여 사용할 수도 있습니다.
let 한: Character = "\u{D55C}" let ㅎㅏㄴ: Character = "\u{1112}\u{1161}\u{11AB}" print(한) // 한 print(ㅎㅏㄴ) // 한
문자 카운팅
문자열의 문자를 세기(카운팅)위해서는 문자열의 count 프로퍼티를 사용하면됩니다.
let failed = "설 연휴 동안 꾸준히 공부하려고 했는데 실패했다...^^" print(failed.count) // 31
엇!? 직접 세어보니 31개가 아닌데...?
라고 생각하시는 분들이 있을 수도 있는데 '공백'도 카운팅을 해주셔야합니다!
let blank = " " print(blank.count) // 3
이렇게 tap을 한번 눌러주고 count를 해보면 3이 나오는 것처럼 말이죠!
(tap누르면 공백 3칸인 줄 이번에 알았습니다....ㅋㅋ 왜 4칸으로 알고있었지ㅠ)
문자열의 접근과 수정
문자열의 접근과 수정은 메소드 / 프로퍼티를 이용하거나 서브스크립트(subscript) 문법을 통해 가능합니다.
문자열 인덱스
오... swift를 처음 배울 때 지옥을 선사했던 문자열 인덱스입니다.
let stringIndex = "문자열 처음 배울 때 진짜 짜증났던 스위프트 문자열 인덱스" print(stringIndex[1]) // 'subscript(_:)' is unavailable: cannot subscript String with an Int, use a String.Index instead
swift에서 [0], [1] 등의 방식으로 문자열에 접근하면 subscript 에러를 내뱉습니다.
문자열은 Int로 접근(첨자)할 수 없으니 String.Index를 사용하라는 말이군요.
문자열에 사용할 수 있는 stringIndex
- startIndex
- endIndex
- index(before:)
- index(after:)
- index(_:offsetBy:)
let stringIndex = "문자열 처음 배울 때 진짜 짜증났던 스위프트 문자열 인덱스" print(stringIndex[stringIndex.startIndex]) // 문 print(stringIndex[stringIndex.index(after: stringIndex.startIndex)]) // 자 print(stringIndex[stringIndex.index(before: stringIndex.endIndex)]) // 스 print(stringIndex[stringIndex.index(stringIndex.startIndex, offsetBy: 2)]) // 열
숫자 하나 달랑~ 쓰는 것보다 복잡해서 어렵게 보이지만 ㅠㅠ
조금만 익숙해지면 크게 어렵지 않습니다!
추가로 for-loop를 통해서도 문자열의 각 index에 접근이 가능합니다.
let stringIndex = "이렇게요" for idx in stringIndex.indices { print(stringIndex[idx]) } /* 이 렇 게 요 */
indices 프로퍼티를 사용해주면 됩니다.
아!! 다른 타입 인덱스 접근과 마찬가지로 범위를 벗어날 경우 에러가 발생하니 주의해주세요!
let stringIndex = "문자열 처음 배울 때 진짜 짜증났던 스위프트 문자열 인덱스" print(stringIndex[stringIndex.endIndex]) // Thread 1: Fatal error: String index is out of bounds
문자의 삽입과 삭제
문자의 삽입과 삭제에 사용되는 메서드
- insert(at:)
- insert(contentsOf:at:)
- remove(at:)
- removeSubrange(:)
var hello = "안녕하세요" hello.insert("!", at: hello.endIndex) print(hello) // 안녕하세요! hello.insert(contentsOf: " 여러분", at: hello.index(before: hello.endIndex)) print(hello) // 안녕하세요 여러분!
문자는 이런식으로 insert를 활용하여 삽입해줄 수 있습니다.
var hello = "안녕하세요 여러분!" hello.remove(at: hello.index(before: hello.endIndex)) print(hello) // 안녕하세요 여러분 let range = hello.index(hello.endIndex, offsetBy: -4)..<hello.endIndex hello.removeSubrange(range) print(hello) // 안녕하세요
삭제도 가능합니다.
String.Index를 활용하여 range를 사용할 수 있다는 점도 잊지마세요!
끗!
부분문자열은 생각보다 복잡해서 따로 다뤄야 할 것 같네요.
문자열은 생각보다 길어지는 군요 ㅠㅠ
다음 3편에서 부분문자열로 문자열 챕터를 마무리하겠습니다.
반응형'Swift 기초문법' 카테고리의 다른 글
[레인스톤 iOS] 스위프트 easy하게 배워볼까? - 콜렉션 타입(1) (0) 2022.02.12 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 문자열과 문자(3) (0) 2022.02.10 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 문자열과 문자(1) (3) 2022.01.29 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 연산자(2) (0) 2022.01.27 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 연산자(1) (0) 2022.01.26