이번 항에서 다루는 내용은 문자(Character)에 대한 항목이다. 문자열(String) 은 다항의 문자(Character)로 구성되어 있다고 생각하면 편할 것이다.
for character in "Dog" {
print(character)
}
//D
//o
//g
//다음 순서대로 문자열 속 문자를 출력하게 된다.
let someString : Character = "!"
// 단독 문자열 리터럴에 대해서는 문자 타입으로 초기화가 가능하다.
let catCharacter : [Character] = ["C", "a", "t"]
let catString = String(catCharacter)
print(catString)
//Cat 을 출력하게 된다.
//문자의 배열을 문자열 타입 전환 시 이를 유추하여 문자열로 반환한다.
let someString = "Some String"
let anyString = " any String"
let new = someString + anyString
//new는 "Some String any String 문자열 리터럴을 가지게 된다.
var someString = "Some String"
let anyString = " any String"
someString += anyString
//위와 동일한 결과를 나타내준다.
let someString : Character = "!"
var anyString : String = "Hello world"
anyString.append(someString)
//"Hello world!"를 값으로 가지게 된다.
문자열 삽입은 상수, 변수, 리터럴에 값이 포함된 표현식을 혼합해서 새로운 String을 생성하는 것이다. 이는 문자열 리터럴에 백슬래시 및 소괄호를 감싸서 전달이 가능하다. 리터럴 안에서 연산을 통한 전달도 가능하다.
let someNumber : Int = 1
let message : String = "\(someNumber) is my answer!"
let message2 : String = "\(someNumber*2) is my new answer!"
//이 경우 메세지는 1 is my answer!를 가지게 된다.
//아래는 연산 후 2 is my answer!를 가진다.
let someString = "Some String!"
someString[someString.startIndex]
//S를 리턴한다.
//someString의 인덱스로 접근하므로 가장 첫 인덱스 값인 S를 반환해준다.
someString[someString.index(before: someString.endIndex)]
//!
//someString에서 마지막 인덱스를 리턴한다.
someString[someString.index(after: someString.startIndex)]
// o를 리턴한다.
var welcome = "Hello"
welcome.insert("!", at: welcome.endIndex)
//이렇게 하게되면 "Hello!"를 리턴하게 된다.
welcome.insert(contentsOf: "there", at: welcome.index(before: welcome.endIndex))
//이렇게 해주게 되면 "hello there!"를 반환해준다.
welcome.remove(at: welcome.index(before: welcome.endIndex))
//이렇게 하면 "hello there"를 반환해준다. 가장 마지막 인덱스 값인 !가 사라져있다.
let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
//반 닫힘 연산자를 이용하여 다음과 같이 범위를 인덱스 범위를 지정해준다.
welcome.removeSubrange(range)
//"hello"를 반환하게 된다.
let someString = "Hello, world"
let index = someString.firstIndex(of: ",") ?? greeting.endIndex
let beginning = greeting[..<index]
//다음과 같이 처음 , 가 나오는 인덱스를 범위로 잡기 위해 firstIndex(of:)메소드를 사용했다.
//그리고 난 후 beginning이라는 상수를 해당 인덱스 앞까지의 문자열 리터럴로 초기화해주었다
let newString = String(beginning)
//그리고 난 결과물을 String의 인스턴스로 최종 변환해주어야 한다.
let a = "Hello"
let b = "world"
if a == b {
print(a)
}
//다음과 같이 연산자를 통해서 문자열의 비교여부를 참, 거짓으로 판별 가능하다.
let acting = [
"Act1. romeo",
"Act1. Juliet",
"Act1. Room"
]
var act1SceneCount = 0
for scene in acting {
if scene.hasPrefix("Act1.") {
act1SceneCount += 1
}
}
//다음과 같이 하면 최종 act1SceneCount변수는 3의 값을 지니게 된다.
var romeoCount = 0
for scene in acting {
if scene.hasSuffix("romeo") {
romeoCount += 1
}
}
//다음과 같이 하게 된다면 최종 1을 지니게 된다.