Swift에서 문자열을 다룰 때 c++과 가장 큰 차이점은 바로
string 내의 문자에 접근하는 방법입니다.
let name = "Woody"
print(name[2])
c++로 코딩에 입문한 사람들은 이 방식이 더 친근하여 대부분 이런식으로 접근합니다. 하지만......
'subscript(_:)' is unavailable: cannot subscript String with an Int, use a String.Index instead.
이라는 에러를 볼 수가 있습니다.
Int 대신 String.Index 타입으로 접근하여라! 라는 이야기인데 그래서 Index를 공부해야 합니다.
string을 다룰 때마다 계속 구글링 하면서 찾는게 일상이 되버려서... 익숙해지지가 않아 한번 정리해두도록 하겠습니다.
string 내의 문자에 접근하기
문자열에서 다섯번째 문자에 접근하기 위해선 어떻게 해야할까요?
let name = "Hello, Woody"
let startIndex: String.Index = name.startIndex
let index = name.index(startIndex, offsetBy: 4)
print(name[index])
startIndex를 먼저 구한 후, index(:offsetBy) 함수를 이용해서 구하면 됩니다.
이 때, 다섯번째인데 왜 4를 더하나요? 라는 의문이 들수도 있는데 string은 문자들의 배열이므로 index는 0부터 시작합니다.
0 : H
1 : e
2 : l
3 : l
4 : o
와 같기 때문에 4를 더해주어야 합니다.
index를 구하는 함수는 여러가지가 있습니다.
index(after:)
let index = name.index(after: startIndex)
print(name[index]) // e
startIndex 바로 다음 index 구하기
index(before:)
let endIndex: String.Index = name.endIndex
let index2 = name.index(before: endIndex)
print(name[index2]) // y
endIndex 바로 전 index 구하기
index(:offsetBy:limitedBy:)
if let index3 = name.index(startIndex, offsetBy: 0, limitedBy: startIndex) {
print(name[index3])
}
startIndex까지 제한을 두고 그 내부에서만 index 구하기 (optional)
'iOS' 카테고리의 다른 글
[CoreAnimation] CAReplicatorLayer 알아보기 (0) | 2022.10.20 |
---|---|
[Swift] 영문자로만 이루어진 String 알아내기 + String Index 쉽게 접근하기 (1) | 2022.08.16 |
Swift로 입력 받기 (출력은 print, 근데 입력은..?) (0) | 2022.01.07 |
[HIG] App Architecture (0) | 2022.01.06 |
[HIG] iOS Design Themes (0) | 2022.01.03 |