* 정의
- 문자열은 일련의 문자 집합이다. 문자열 리터럴은 문자를 ""로 감싸서 표현한다.
let str = "str"
var str2 = "asdf"
Imutable String은 상수로 선언되어 변경이 불가능한 문자열이고, Mutable String은 변수로 선언되어 얼마든지 변경이 가능한 문열이다.
str.append("letString")
str2.appending("varString")
append 메소드를 사용하면, 문자열이 비록 상수로 선언되어 있다 하더라도 얼마든지 원본값을 변경할 수 있다. 그러나 appending 메소드는 원본값을 변경하지 않고, 복사본을 생성하여 변경된 값을 저장한다.
1. 문자열 보간
let date = Date()
"오늘은 \(date) 입니다."
let temp = 30.3
"오늘은 \(temp)도 이다."
Double.pi
"pi 값은 \(Double.pi)"
문자열을 조금더 동적으로 이용하는 것이 가능하다. 백슬래쉬와 괄호를 이용하여 상수나 변수, 그리고 리터럴을 문자열에 삽입할 수 있다.
2. 문자열 접근
let source = "Hello, Swift"
source[source.startIndex]
source[source.endIndex]
source[source.index(before: source.endIndex)]
source[source.index(after: source.startIndex)]
source[source.index(source.startIndex, offsetBy: 7)]
문자열인덱스는 정수가 아닌, 특정 문자의 위치를 나타내는 주소같은 개념이며, 특정 문자에 접근을 하고 싶다면 서브스크립트를 이용하여 접근하면 된다. 그리고 startIndex 와 endIndex를 사용하여 인덱스의 시작과 끝부분에 접근하는 것도 가능하다. 그러나 주의해야 할점은 endIndex를 통해 얻게 되는 값은 마지막 인덱스의 +1이므로 endIndex 전의 인덱스에 접근해야 원하는 값을 얻을 수 있다.
3. 문자열 길이 확인
source.count
"Apple" == "apple"
4. 문자열 대소문자 비교
Swift는 대소문자를 구별하기 떄문에 Apple 과 apple은 엄연히 다른문자로 인식된다. 그렇기 때문에 둘을 비교하여 True를 리턴하고 싶다면 대소문자를 서로 일치시켜야 한다.
"Apple".uppercased()
"Apple".lowercased()
피연산자들을 동시에 변환하여 비교하는 것도 물론 가능하다
"Apple".lowercased() == "apple".lowercased()
"Apple".caseInsensitiveCompare("apple")
"Apple".caseInsensitiveCompare("apple") == .orderedSame
5. 접두사 접미어 비교
var greeting = "Hello, Swift Programming!!!"
greeting.hasPrefix("Hello")
greeting.hasSuffix("!!!")
6. 포함요소 확인
greeting.contains("Swift")
greeting.contains("swift")
문자열안의 요소를 확인하는데에 대소문자를 구별하기 때문에 소문자를 사용하여 "swift" 접근한다면 false가 return이 된다. 하지만 메소드를 사용하여 true를 return 하게 할 수 있다.
greeting.lowercased().contains("swift")
문자열의 안의 요소를 확인한 후에 다른문자열로 바꿔주는 것도 가능하다. greeting.replaceSubrange 메소드를 사용하여 원본을 바꿔보자. 하지만 원본을 변경하는 것은 실패를 하였을때, 크래쉬를 유발하니 옵셔널바인딩을 사용한다.
if let range = greeting.range(of: "Swift") {
greeting[range] = "Swift 5.3"
greeting.replaceSubrange(range, with: "Swift 5.3")
}
바꾼값을 복사본에 저장하는 것도 가능하다. 다만 이때 사용하는 메소드는 replacingOccurrences이다.
let r = greeting.replacingOccurrences(of: "swift 5.3", with: "Swift",
options: [.caseInsensitive])