문자열은 문자의 연속으로, Swift에서는 String 타입으로 표현됩니다. 이 String 타입은 Foundation의 NSString 클래스와 연결되어 있어서, Foundation을 import하면 NSString의 다양한 메서드를 별도의 변환 없이 바로 사용할 수 있습니다.
Swift에서는 문자열 안의 개별 문자를 for-in 루프를 사용해 순회할 수 있습니다.
for character in "Dog!" {
print(character)
}
// 출력 결과:
// D
// o
// g
// !
또한, 단일 문자를 표현하고 싶을 때는 Character 타입을 사용해 상수나 변수를 선언할 수 있습니다.
let exclamationMark: Character = "!"
문자 배열을 사용해 새로운 문자열을 생성할 수도 있습니다.
let catCharacters: [Character] = ["C", "a", "t", "!"]
let catString = String(catCharacters)
print(catString) // 출력: "Cat!"
문자열 안에 변수나 표현식을 포함하려면 역슬래시()와 괄호를 활용하면 됩니다. 이를 통해 문자열을 보다 동적으로 생성할 수 있습니다.
let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
// message는 "3 times 2.5 is 7.5"
문자열의 문자 수를 확인하려면 count 프로퍼티를 사용하면 됩니다.
let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪"
print("unusualMenagerie has \(unusualMenagerie.count) characters")
// 출력: "unusualMenagerie has 40 characters"
여기서 count는 문자열의 실제 문자 개수를 기준으로 계산됩니다. 이는 유니코드 확장 문자소 클러스터 단위를 기반으로 하기 때문에, NSString의 length와는 다를 수 있습니다. NSString의 경우 UTF-16 코드 단위를 기준으로 계산합니다.
문자열 접근과 수정(Accessing and Modifying a String)
문자열 인덱스(String Indices)
Swift의 문자열은 각 문자의 위치를 나타내기 위해 String.Index 타입을 사용합니다. 문자열의 첫 번째 문자에 접근하려면 startIndex를, 마지막 문자 다음 위치를 나타내는 endIndex를 사용할 수 있습니다. 다만, endIndex는 문자열 범위 바깥을 나타내므로 직접 접근하면 에러가 발생합니다.
문자열의 인덱스를 조작하려면 아래 메서드들을 사용할 수 있습니다.
• index(before:): 주어진 인덱스 바로 앞의 위치 반환
• index(after:): 주어진 인덱스 바로 뒤의 위치 반환
• index(_:offsetBy:): 특정 인덱스에서 지정된 거리만큼 떨어진 위치 반환
예를 들어 다음과 같이 문자열의 각 위치에 접근할 수 있습니다.
let greeting = "Guten Tag!"
greeting[greeting.startIndex]
// "G"
greeting[greeting.index(before: greeting.endIndex)]
// "!"
greeting[greeting.index(after: greeting.startIndex)]
// "u"
let index = greeting.index(greeting.startIndex, offsetBy: 7)
greeting[index]
// "a"
문자열에 새로운 문자를 추가하거나 삭제하는 것도 간단합니다.
• insert(:at:): 특정 위치에 문자 추가
• insert(contentsOf:at:): 특정 위치에 문자열 추가
• remove(at:): 특정 위치의 문자 삭제
• removeSubrange(:): 특정 범위의 문자 삭제
var welcome = "hello"
welcome.insert("!", at: welcome.endIndex)
// welcome: "hello!"
welcome.insert(contentsOf: " there", at: welcome.index(before: welcome.endIndex))
// welcome: "hello there!"
welcome.remove(at: welcome.index(before: welcome.endIndex))
// welcome: "hello there"
let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
welcome.removeSubrange(range)
// welcome: "hello"
문자열에서 특정 부분을 추출하면 String 대신 Substring이라는 타입이 생성됩니다. Substring은 String과 거의 같은 기능을 제공하지만, 문자열의 메모리를 공유하기 때문에 오랜 시간 저장하기에는 적합하지 않습니다. 필요하다면 Substring을 String으로 변환해 사용하면 됩니다.
let greeting = "Hello, world!"
let index = greeting.firstIndex(of: ",") ?? greeting.endIndex
let beginning = greeting[..<index]
// beginning은 "Hello"라는 Substring
// 오랜 기간 저장하려면 String으로 변환
let newString = String(beginning)
출처: Swift 공식 문서를 참고해 정리했습니다.
https://bbiguduk.gitbook.io/swift/language-guide-1/strings-and-characters