TIL 240118
Swift에서는 String 문자열에서 정수 인덱스로 접근이 불가능하다.
- Swift에서 문자열을 인덱스로 접근했을 경우
다른 언어의 경우에는 str[i] 의 형태로 정수 인덱스로 문자열에 접근이 가능하지만
Swift 에서는 다음과 같이 오류가 발생한다.
'subscript(_:)' is unavailable: cannot subscript String with an Int, use a String.Index instead.'
그래서 Swift에서는 String.Index 타입을 사용하여 문자열의 특정 위치를 나타내야 한다.
다음은 문자열의 인덱스에 접근하는 몇 가지 방법이다.
1. 문자열 인덱싱 (String.Index)
str[str.startIndex, offsetBy: index]
let str = "Swift"
let index = 2
let charAtIndex = str[str.index(str.startIndex, offsetBy: index)]
// -> 시작 인덱스에서 2만큼 이동한 새로운 인덱스
print(charAtIndex) // 출력 결과: i
str.startIndex는 문자열의 첫 번째 인덱스를 나타내며, offsetBy 함수를 사용하여 특정 오프셋에 있는 인덱스에 접근한다.
'offsetBy' 메서드 : 현재 위치에서 주어진 수만큼 이동한 새로운 인덱스를 반환
let str = "Swift"
let index = str.index(str.startIndex, offsetBy: 2)
let charAtIndex = str[index]
print(charAtIndex) // 출력 결과: i
인덱스 활용한 방법이다.
🤯
python, c 등 언어에서는 str[2] 를
Swift 에서는 str[str.index(str.startIndex, offsetBy: 2) 로 작성해야 한 문자에 접근이 가능하다.
매우 비효율적이고 귀찮은 과정이다..
한 글자당 메모리 크기가 유연하기 때문에 그렇다고 한다.
2. 인덱스 접근 함수
다음은 Swift에서 문자열 인덱스에 접근하기 위한 몇 가지 유용한 함수들이 있다.
- startIndex : 문자열의 첫 번째 인덱스를 반환
- endInex : 문자열의 끝 다음의 인덱스를 반환(문자열의 범위 포함되지 않음)
- index(_:offsetBy:) :특정 인덱스에서 주어진 오프셋만큼 이동한 새로운 인덱스를 반환
- index(_:offsetBy:limeitedBy:) : 특정 인덱스에서 주어진 오프셋만큼 이동한 새로운 인덱스를 반환, 범위 벗어날 경우 'nil' 반환
- index(after:) index(before:) : 현재 인덱스에서 다음 또는 이전 인덱스를 반환
- indices : 문자열의 모든 유효한 인덱스를 나타내는 범위 반환
let str = "Swift"
str[str.startIndex] // S
//str[str.endIndex] // error(문자열 범위 포함 x)
str[str.index(str.startIndex, offsetBy: 2)] // i
str[str.index(str.startIndex, offsetBy: 3, limitedBy: str.endIndex)!] // f
str[str.index(after: str.startIndex)] // w
str[str.index(before: str.endIndex)] // t
for index in str.indices {
print(str[index])
}
오늘은 String.Index 타입을 사용하여 문자열의 인덱스에 접근하는 방법과 문자열 인덱스에 접근하기 위한 함수들을 알아보았다.
인덱스 접근은 배열과 마찬가지로 대괄호 []를 사용한다고 생각하면 간단하다.
다음에는 문자열 관련 함수들에 대해 정리해봐야겠다 !
'Devlog👩🏻💻 > Swift' 카테고리의 다른 글
[Swift] Optional (3) | 2024.03.08 |
---|---|
[Swift] 컬렉션 타입(Collection Type) - Dictionary, Set (2) | 2024.01.24 |
[Swift] 컬렉션 타입(Collection Type) - Array (3) | 2024.01.23 |
[Swift] 타입 추론(Type Inference)과 타입 어노테이션(Type Annotation) (2) | 2024.01.17 |
[Swift] 조건문에서 ','와 '&&'의 차이 (3) | 2024.01.16 |