[Swift] Strings and Characters

김승윤·2022년 4월 27일

Swift 정리

목록 보기
2/6
post-thumbnail

Strings and Characters

String Literals (문자열 리터럴)

문자열은 큰 따옴표로 묶여진 문자의 조합이다.

let someString = "Some string literal value"
  • Multiline String LIterals

    3개의 큰 따옴표로 둘러쌓인 String은 줄바꿈, 공백까지 표현가능하다.
let quatation = """
It's an apple. "Hi,
Apple!!"

출력 결과에는 영향을 끼치지 않고 코드를 읽기 용이하기 위해 줄바꿈을 하고 싶다면 \를 사용하자.

let soft = """
Hi there \
It's Nick
"""
// Hi there It's Nick
  • Special Characters in String Literals (문자열 리터럴 안의 특수문자)

    문자열 리터럴은 다음의 특수문자를 포함할 수 있다.

\0, \, \t, \n, \r, \", \'
\u{n}

let words = "\"Hi\"" // "Hi"
let heart = "\u{1F496}" // 💖

Initializing an Empty String (빈 스트링 초기화)

다음과 같은 방법으로 빈 스트링을 생성합니다.

var emptryString = ""
var anotherEmptyString = String()

isEmpty를 통해 빈 String인지 판별도 가능하다.

if emptyString.isEmpty {
	print("empty!")
}

String Mutability (스트링 변경)

String은 직접 수정하거나 덧셈 연산을 통해 수정이 가능하다.

var variableString = "Horese"
variableString += " and carriage"

let constantString = "Hi"
constantString += " there"
// wrong

Strings are Value Type (스트링은 값 타입)

String은 값타입이다. 만약 함수나 메소드에 새로운 String 값을 생성하면 그 String 값은 복사되어진다. 복사되어진 String 값이 수정되어도 원본 String 값은 변하지 않는다.

Working with Characters (문자)

문자열을 for-in loop을 사용해 접근 가능하다.

for character in "Dog!" {
	print(character)
}

문자 상수를 선언 가능하다.

let character: Character = "!"

문자 배열을 문자열 초기화 메소드에 넣어 문자열을 생성 가능하다.

let cat: [Character] = ["C", "a", "t"]
let catString = String(catCharacters)
print(catString) // "Cat"

Concatenating Strings and Characters (문자열과 문자의 결합)

let string1 = "hello"
let string2 = " there"
var welcome = string1 + string2
// "hello there"

String Interpolation (문자열 삽입)

\ ()를 이용해 상수, 변수, 리터럴 값을 문자열에 추가할 수 있다.

let multiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(mulitplier) * 2.5)"
// "3 times 2.5 is 7.5"

Unicode (유니코드)

Swift의 네이티브 문자열 타입은 유니코드 스칼라 값으로 만들어졌다.

  • 문자열 인덱스

let greeting = "Guten Tag!"
greeting[greeting.startIndex]
//G
greeting[greeting.index(before: greeting.endIndex)]
// !
greeting[greeting.index(after: greeting.startIndex)]
// u
let index = greeting[greeting.index(b greeting.startIndex, offsetBy: 7)]
greeting[index]
// a

문자열의 인덱스를 벗어나면 런타임 에러가 발생한다.

문자열의 개별 문자를 접근하기 위해서는 indices 프로퍼티를 사용한다.

for index in greeting.indices {
	print("\(greeting[index]) ", terminator: "")
}
// G u t e n  T a g !
  • Inserting and Removing (문자의 삽입과 삭제)

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

이 메소드들은 Array, Dictionary, Set 등에서도 동일하게 사용할 수 있다.

Substrings (부분 문자열)

서브스크립트 메소드를 이용하여 얻은 부분 문자열은 부분문자열(SubString) 인스턴스이다. 오랜기간 사용할 경우 문자열 인스턴스로 바꿔서 사용하는 게 좋다.

let greeting = "Hello, World!"
let index = greeting.index(of: ",") ?? greeting.endIndex
let beginning = greeting[..<index]
// beginning : Hello

// SubString인 beginning을 String으로 변환
let newString = String(beginning)
  • Comparing Strings (문자열과 문자 비교)

문자열과 문자 비교에는 ==, != 를 사용한다

  • Prefix and Suffix Equality (접두사와 접미사 비교)

hasPrefix(:) 문자열 배열에 해당 접두어가 몇개 들었는지 확인
hasSuffix(:) 문자열 배열에 해당 접미어가 몇개 들었는지 확인

Unicode Representations of Strings (문자열의 유니코드 표현)

utf-8
utf-16
unicode scalar

profile
정리왕을 꿈꾸며!

0개의 댓글