문자열 리터럴
let something = "Im not familiar with this programing language"
✔️ 위의 예제와 같이 문자열은 큰 따옴표(")로 묶어 표현한다.
let ironMan = """
If we can’t accept limitations,
then we’re no better than the bad guys.
"""
✔️ 위의 예제와 같이 여러줄의 문자열을 사용하고 싶은 경우 큰 따옴표 3개(""")로 묶어서 사용할 수 있다.
let singleLineString = "My name is seongil."
let multiLineString = """
My name is seongil.
"""
✔️ 위의 예제와 같이 스위프트에서는 여러줄 문자열을 사용할 때는 첫 시작의 """ 다음 줄부터 마지막 """의 직전까지를 문자열로 본다. 따라서 singleLineString은 multiLineString과 같은 값을 같게 된다.
let Thor = """
I want to choose my own path. \
Live in the moment.
"""
// I want to choose my own path. Live in the moment.
✔️ 위의 예제와 같이 여러줄 문자열을 사용하며 줄바꿈을 하고 싶으면 백슬래쉬( \ )를 사용하면 된다.
let lineBreaks = """
I can do this all day.
- Captain America
"""
✔️ 위의 예제와 같이 문자열의 시작과 끝에 각각 빈줄을 넣고 싶다면 한 줄을 띄어서 문자열을 입력하면 된다.
let lineWithIndentation = """
You are this light of my life,
my pecious son, // 들여쓰기
my little Star-Lord.
- Meredith Quill
"""
✔️ 위의 예제와 같이 들여쓰기도 가능하다. 들여쓰기 기준은 끝나는 지점의 """의 위치이다. 닫는 위치의 """ 앞에 있는 문자들은 전부 무시되고 그 이후의 공백은 문자열에 반영된다.
문자열 리터럴의 특수 문자
let nullCaracterEx = "\0" //
let apostropheEx = "\'apostropheEx" // 'apostropheEx
let quotationMarkEx = "\"quotationMarkEx" // "quotationMarkEx
let backSlashEx = "\\backSlash" // \backSlash
let tabEx = "123\t456" // 123 456
let escapeEx = "123\n456"
// 123
// 456
\0 | null charcter |
\\ | back slash |
\t | tap |
\n | escape sequence (줄바꿈) |
\r | carriage return (커서의 위치를 줄의 맨 처음으로 보냄) |
\" | quotationMark (큰 따옴표) |
\' | apostrophe (작은 따옴표) |
✔️ 위의 예제와 같이 스위프트에서는 위와 같은 특수 문자를 포함할 수 있다.
let dollaSign = "\u{24}" // $ 유니코트 U+0024
let blackHeart = "\u{2665}" // ♥ 유니코드 U+2665
let sparklingHeart = "\u{1F496}" // 💖 유니코드 U+1F496
✔️ 위의 예제와 같이 스위프트에서는 유니코드를 포함할 수 있다.
✅ \u{n} , n은 1~8자리 16진수 형태로 구성된 유니코드
빈 문자열 초기화
var emptyString = ""
var emptyString2 = String()
✔️위의 예제와 같이 빈 문자열을 초기화할 수 있다.
if emptyString.isEmpty {
print("true")
}
// true
문자열 수정
var blackPanther = "lt's hard for a good man to be a king."
blackPanther += " - Black Panther"
// It's hard for a good man to be a king. - Black Panther
let carolDanvers = "We can't do this alone. We need you."
carolDanvers += " - Carol Danvers"
// ERR. 문자열 상수(let)으로 선언돼 있기 때문.
✔️ 위의 예제와 같이 문자열 변수(var)으로 선언돼 있으면 + 연산자를 이용해서 수정이 가능하나, 문자열 상수(let)으로 선언돼 있으면 수정이 불가능하다.
값 타입 문자열
✅ 스위프트의 String은 값 타입이다. 그래서 String이 다른 함수 혹은 메소드로 부터 생성되면 String값이 할당 될때, 이전 String의 레퍼런스를 할당하는 것이 아니라 값을 복사해서 생성한다. 반대로 이야기 하면 다른 메소드에서 할당 받은 문자열은 그 문자열을 수정해도 원본 문자열이 변하지 않기 때문에 편하게 사용해도 된다.
문자
for catChar in "Cat!😻" {
print(catChar)
}
// C
// a
// t
// !
// 😻
✔️ 위의 예제와 같이 문자열의 개별 문자를 for-in loop를 사용해 접근할 수 있다.
let questionMark:Character = "?"
✔️ 위의 예제와 같이 문자 상수를 선언할 수 있다.
let catCharacters: [Character] = ["C", "a", "t", "!", "😻"]
let catString = String(catCharacters)
print(catString)
// Cat!😻
✔️ 위의 예제와 같이 문자 배열을 이용해 문자열의 초기화 메소드(String())에 인자로 넣어 문자열을 생성할 수 있다.
let string1 = "I like"
let string2 = " puppy"
var string3 = string1 + string2
// string3 : I like puppy
✔️ 위의 예제와 같이 + 연산자를 이용하여 문자열끼리의 결합이 가능하다.
let string1 = "I like"
let string2 = " puppy"
var string3 = string1 + string2
let exclamationMark:Character = "!"
string3.append(exclamationMark)
// string3 : I like puppy!
✔️ 위의 예제와 같이 append() 메소드를 이용하여 문자열과 문자의 결합이 가능하다.
문자열 삽입
let time = 7
let meesage = "It\'s \(time) o\'clock"
// It's 7 o'clock
✔️ 위의 예제와 같이 백슬래쉬 괄호 \() 를 이용해 상수, 변수, 리터럴 값을 문자열에 추가할 수 있다.
유니코드
let precomposed: Character = "\u{D55C}" // 한
let decomposed: Character = "\u{1112}\u{u1161}\u{11AB}" // ㅎ, ㅏ,ㄴ
// precomposed : 한, decomposed 한
✔️ 위의 예제와 같이 자음과 모음을 결합해서 사용할 수 있다.
문자 세기
let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
print("alphabet has \(alphabet.count) characters.")
// alphabet has 26 characters.
✔️ 위의 예제와 같이 문자열의 문자를 세기 위해서는 문자열의 count 프로퍼티를 이용한다.
문자열의 접근과 수정
✅ 문자열의 수정과 접근은 문자열 메소드 혹은 프로퍼티를 이용하거나 서브스크립트 문법을 이용해 할 수 있다. 서브스크립트는 시퀀스나 딕셔너리 등 대괄호 [] 안에 특정 값을 넣어 원하는 값을 바로 찾아오는 기능을 말한다. 문자열의 경우, 인덱스 값을 통해 해당 위치의 Character 값을 접근할 수 있다.
// define
subscript(String.index) -> Character
✅ 스위프트에서는 Int형 index값으로 문자 요소에 접근할 수 없다.
let myName = "YeoSeongil"
myName(str[0]) // ERR.
문자열 인덱스
1️⃣ startIndex : 문자열의 시작 요소 인덱스를 가리킨다.
let myName = "YeoSeongil"
myName[myName.startIndex]
// Y
2️⃣ endIndex : 문자열의 마지막 요소 인덱스 다음을 가리킨다.
let myName = "YeoSeongil"
myName[myName.endIndex] // ERR. 문자열의 인덱스를 벗어남.
myName[myName.index(before: myName.endIndex)]
// l
3️⃣ index(before: String.Index) : 인자로 들어온 인덱스 1칸 앞을 가리킨다.
let myName = "YeoSeongil"
myName[myName.index(before: myName.endIndex)]
// l
4️⃣ index(after: String.Index) : 인자로 들어온 인덱스 1칸 뒤를 가리킨다.
let myName = "YeoSeongil"
myName[myName.index(after: myName.startIndex)]
// e
5️⃣ index(String.Index, offsetBy: String.IndexDistance) : 인자로 들어온 인덱스와 offsetBy 차이만큼 떨어진 곳을 가리킨다.
let myName = "YeoSeongil"
myName[myName.index(myName.startIndex, offsetBy: 2)] // o
myName[myName.index(myName.endIndex, offsetBy: -2)] // i
let myName = "YeoSeongil"
myName[myName.endIndex] // ERR. 문자열의 인덱스를 벗어남.
myName[myName.index(myName.startIndex, offsetBy: -5)] // ERR. 문자열의 인덱스를 벗어남.
myName[myName.index(myName.endIndex, offsetBy: 2)] // ERR. 문자열의 인덱스를 벗어남.
✅ 위의 예제와 같이 문자열의 인덱스를 벗어나는 문자를 가져오려고 하면 런타임 에러가 발생한다.
for index in myName.indices {
print("\(myName[index]) ", terminator: "")
}
// Y e o S e o n g i l
✔️ 위의 예제와 같이 문자열의 개별 문자를 접근하기 위해서는 indices 프로퍼티를 사용한다.
문자의 삽입과 삭제
1️⃣ insert(char, at: String.index) : 문자열의 특정 위치에 한 개의 문자를 삽입한다.
var firstName = "seongil"
firstName.insert("?", at: firstName.endIndex)
// firstName : seongil?
2️⃣ insert(contentsOf: String, at: String.index) : 문자열의 특정 위치에 문자열을 삽입한다.
var firstName = "seongil"
firstName.insert(contentsOf: "yeo", at: firstName.index(firstName.endIndex, offsetBy:-7))
// firstName : yeoseongil
3️⃣ remove(at:) : 문자열의 특정 인덱스에 위치하는 한 개의 문자를 제거한다.
var firstName = "seongil"
firstName.remove(at: firstName.index(before: firstName.endIndex))
// firstName : seongi
4️⃣ removeSubrange(range) : 지정된 범위의 문자열을 제거한다.
var firstName = "seongil"
let range = firstName.index(firstName.endIndex, offsetBy:-1)..<firstName.endIndex
firstName.removeSubrange(range)
// seong
부분 문자열
let liverpool = "Anfield, Gerrad"
let index = liverpool.index(of: ",") ?? liverpool.endIndex
let beginning = liverpool[..<index]
// beginning : Anfield
let newString = String(liverpool)
✔️ 위의 예제와 같이 문자열에서 부분 문자를 얻기 위해 prefix (_:)와 같은 서브스크립트 메소드를 사용할 수 있는데, 그렇게 얻은 부분 문자열은 문자열 인스턴스가 아니라 부분문자열 인스턴스이다. 만약 부분 문자열을 단기간 사용하는게 아니라 오랜기간 사용한다면 메모리 관리를 위해 문자열 인스턴스로 바꿔서 사용하는 것이 좋다.
문자열과 문자 비교
let moana = "There comes a day when you’re gonna look around"
let sameMoana = "There comes a day when you’re gonna look around"
if moana == sameMoana {
print("equal")
}
// equal
✔️ 위의 예제와 같이 문자열과 문자 비교에는 == , != 연산자를 사용한다.
// "Voulez-vous un café?" using LATIN SMALL LETTER E WITH ACUTE
let eAcuteQuestion = "Voulez-vous un caf\u{E9}?"
// "Voulez-vous un café?" using LATIN SMALL LETTER E and COMBINING ACUTE ACCENT
let combinedEAcuteQuestion = "Voulez-vous un caf\u{65}\u{301}?"
if eAcuteQuestion == combinedEAcuteQuestion {
print("These two strings are considered equal")
}
// These two strings are considered equal 출력
✔️ 위의 예제와 같이 유니코드는 결합된 문자열을 갖고 비교한다.
let latinCapitalLetterA: Character = "\u{41}"
let cyrillicCapitalLetterA: Character = "\u{0410}"
if latinCapitalLetterA != cyrillicCapitalLetterA {
print("These two characters are not equivalent.")
}
// Prints "These two characters are not equivalent."
✔️ 위의 예제와 같이 같은 유니코드 문자여도 유니코드가 다르면 다른 문자로 판별한다. 위의 예제는 영어의 알파밧 대문자 A(U+0041)와 러시아어에서 사용되는 대문자 A(U+0410)을 비교한 것이다.
접두사와 접미사 비교
let romeoAndJuliet = [
"Act 1 Scene 1: Verona, A public place",
"Act 1 Scene 2: Capulet's mansion",
"Act 1 Scene 3: A room in cell Capulet's mansion",
"Act 1 Scene 4: A street outside Capulet's mansion",
"Act 1 Scene 5: The Great Hall in Capulet's mansion",
"Act 2 Scene 1: Outside Capulet's mansion",
"Act 2 Scene 2: Capulet's orchard",
"Act 2 Scene 3: Outside Friar Lawrence's cell",
"Act 2 Scene 4: A street in Verona",
"Act 2 Scene 5: Capulet's mansion",
"Act 2 Scene 6: Friar Lawrence's cell"
]
var mansionCount = 0
var cellCount = 0
var etcCount = 0;
for scene in romeoAndJuliet {
if scene.hasSuffix("mansion") {
mansionCount += 1
} else if scene.hasSuffix("cell"){
cellCount += 1
} else {
etcCount += 1
}
}
1️⃣ hasPrefix(String) : 접두사 String을 비교한다.
2️⃣ hasSuffix(String) : 접미사 String을 비교한다.
문자열 유니코드 표현
1️⃣ String.utf8 : UTF-8로 인코딩 하여 표현한다.
let dogString = "Dog!!🐶"
for codeUnit in dogString.utf8 {
print("\(codeUnit) ", terminator: "")
}
print("")
// 68 111 103 226 128 188 240 159 144 182
2️⃣ String.utf16 : UTF-16로 인코딩 하여 표현한다.
let dogString = "Dog!!🐶"
for codeUnit in dogString.utf16 {
print("\(codeUnit) ", terminator: "")
}
print("")
// 68 111 103 8252 55357 56374
3️⃣ String.unicodeScalars : 유니코드 스칼라로 표현한다.
let dogString = "Dog!!🐶"
for scalar in dogString.unicodeScalars {
print("\(scalar.value) ", terminator: "")
}
print("")
// 68 111 103 8252 128054
for scalar in dogString.unicodeScalars {
print("\(scalar) ")
}
// D
// o
// g
// !!
// 🐶
'Swift > Swift 기본기' 카테고리의 다른 글
06. 클로저 (Closures) (0) | 2023.03.18 |
---|---|
05. 함수 (Functions) (0) | 2023.03.18 |
04. 제어문 (Control Flow) (0) | 2023.03.17 |
03. 콜렉션 타입 (Collection Types) (0) | 2023.03.17 |
01. 기본 연산자 (Basic Operators) (1) | 2023.03.15 |
문자열 리터럴
let something = "Im not familiar with this programing language"
✔️ 위의 예제와 같이 문자열은 큰 따옴표(")로 묶어 표현한다.
let ironMan = """
If we can’t accept limitations,
then we’re no better than the bad guys.
"""
✔️ 위의 예제와 같이 여러줄의 문자열을 사용하고 싶은 경우 큰 따옴표 3개(""")로 묶어서 사용할 수 있다.
let singleLineString = "My name is seongil."
let multiLineString = """
My name is seongil.
"""
✔️ 위의 예제와 같이 스위프트에서는 여러줄 문자열을 사용할 때는 첫 시작의 """ 다음 줄부터 마지막 """의 직전까지를 문자열로 본다. 따라서 singleLineString은 multiLineString과 같은 값을 같게 된다.
let Thor = """
I want to choose my own path. \
Live in the moment.
"""
// I want to choose my own path. Live in the moment.
✔️ 위의 예제와 같이 여러줄 문자열을 사용하며 줄바꿈을 하고 싶으면 백슬래쉬( \ )를 사용하면 된다.
let lineBreaks = """
I can do this all day.
- Captain America
"""
✔️ 위의 예제와 같이 문자열의 시작과 끝에 각각 빈줄을 넣고 싶다면 한 줄을 띄어서 문자열을 입력하면 된다.
let lineWithIndentation = """
You are this light of my life,
my pecious son, // 들여쓰기
my little Star-Lord.
- Meredith Quill
"""
✔️ 위의 예제와 같이 들여쓰기도 가능하다. 들여쓰기 기준은 끝나는 지점의 """의 위치이다. 닫는 위치의 """ 앞에 있는 문자들은 전부 무시되고 그 이후의 공백은 문자열에 반영된다.
문자열 리터럴의 특수 문자
let nullCaracterEx = "\0" //
let apostropheEx = "\'apostropheEx" // 'apostropheEx
let quotationMarkEx = "\"quotationMarkEx" // "quotationMarkEx
let backSlashEx = "\\backSlash" // \backSlash
let tabEx = "123\t456" // 123 456
let escapeEx = "123\n456"
// 123
// 456
\0 | null charcter |
\\ | back slash |
\t | tap |
\n | escape sequence (줄바꿈) |
\r | carriage return (커서의 위치를 줄의 맨 처음으로 보냄) |
\" | quotationMark (큰 따옴표) |
\' | apostrophe (작은 따옴표) |
✔️ 위의 예제와 같이 스위프트에서는 위와 같은 특수 문자를 포함할 수 있다.
let dollaSign = "\u{24}" // $ 유니코트 U+0024
let blackHeart = "\u{2665}" // ♥ 유니코드 U+2665
let sparklingHeart = "\u{1F496}" // 💖 유니코드 U+1F496
✔️ 위의 예제와 같이 스위프트에서는 유니코드를 포함할 수 있다.
✅ \u{n} , n은 1~8자리 16진수 형태로 구성된 유니코드
빈 문자열 초기화
var emptyString = ""
var emptyString2 = String()
✔️위의 예제와 같이 빈 문자열을 초기화할 수 있다.
if emptyString.isEmpty {
print("true")
}
// true
문자열 수정
var blackPanther = "lt's hard for a good man to be a king."
blackPanther += " - Black Panther"
// It's hard for a good man to be a king. - Black Panther
let carolDanvers = "We can't do this alone. We need you."
carolDanvers += " - Carol Danvers"
// ERR. 문자열 상수(let)으로 선언돼 있기 때문.
✔️ 위의 예제와 같이 문자열 변수(var)으로 선언돼 있으면 + 연산자를 이용해서 수정이 가능하나, 문자열 상수(let)으로 선언돼 있으면 수정이 불가능하다.
값 타입 문자열
✅ 스위프트의 String은 값 타입이다. 그래서 String이 다른 함수 혹은 메소드로 부터 생성되면 String값이 할당 될때, 이전 String의 레퍼런스를 할당하는 것이 아니라 값을 복사해서 생성한다. 반대로 이야기 하면 다른 메소드에서 할당 받은 문자열은 그 문자열을 수정해도 원본 문자열이 변하지 않기 때문에 편하게 사용해도 된다.
문자
for catChar in "Cat!😻" {
print(catChar)
}
// C
// a
// t
// !
// 😻
✔️ 위의 예제와 같이 문자열의 개별 문자를 for-in loop를 사용해 접근할 수 있다.
let questionMark:Character = "?"
✔️ 위의 예제와 같이 문자 상수를 선언할 수 있다.
let catCharacters: [Character] = ["C", "a", "t", "!", "😻"]
let catString = String(catCharacters)
print(catString)
// Cat!😻
✔️ 위의 예제와 같이 문자 배열을 이용해 문자열의 초기화 메소드(String())에 인자로 넣어 문자열을 생성할 수 있다.
let string1 = "I like"
let string2 = " puppy"
var string3 = string1 + string2
// string3 : I like puppy
✔️ 위의 예제와 같이 + 연산자를 이용하여 문자열끼리의 결합이 가능하다.
let string1 = "I like"
let string2 = " puppy"
var string3 = string1 + string2
let exclamationMark:Character = "!"
string3.append(exclamationMark)
// string3 : I like puppy!
✔️ 위의 예제와 같이 append() 메소드를 이용하여 문자열과 문자의 결합이 가능하다.
문자열 삽입
let time = 7
let meesage = "It\'s \(time) o\'clock"
// It's 7 o'clock
✔️ 위의 예제와 같이 백슬래쉬 괄호 \() 를 이용해 상수, 변수, 리터럴 값을 문자열에 추가할 수 있다.
유니코드
let precomposed: Character = "\u{D55C}" // 한
let decomposed: Character = "\u{1112}\u{u1161}\u{11AB}" // ㅎ, ㅏ,ㄴ
// precomposed : 한, decomposed 한
✔️ 위의 예제와 같이 자음과 모음을 결합해서 사용할 수 있다.
문자 세기
let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
print("alphabet has \(alphabet.count) characters.")
// alphabet has 26 characters.
✔️ 위의 예제와 같이 문자열의 문자를 세기 위해서는 문자열의 count 프로퍼티를 이용한다.
문자열의 접근과 수정
✅ 문자열의 수정과 접근은 문자열 메소드 혹은 프로퍼티를 이용하거나 서브스크립트 문법을 이용해 할 수 있다. 서브스크립트는 시퀀스나 딕셔너리 등 대괄호 [] 안에 특정 값을 넣어 원하는 값을 바로 찾아오는 기능을 말한다. 문자열의 경우, 인덱스 값을 통해 해당 위치의 Character 값을 접근할 수 있다.
// define
subscript(String.index) -> Character
✅ 스위프트에서는 Int형 index값으로 문자 요소에 접근할 수 없다.
let myName = "YeoSeongil"
myName(str[0]) // ERR.
문자열 인덱스
1️⃣ startIndex : 문자열의 시작 요소 인덱스를 가리킨다.
let myName = "YeoSeongil"
myName[myName.startIndex]
// Y
2️⃣ endIndex : 문자열의 마지막 요소 인덱스 다음을 가리킨다.
let myName = "YeoSeongil"
myName[myName.endIndex] // ERR. 문자열의 인덱스를 벗어남.
myName[myName.index(before: myName.endIndex)]
// l
3️⃣ index(before: String.Index) : 인자로 들어온 인덱스 1칸 앞을 가리킨다.
let myName = "YeoSeongil"
myName[myName.index(before: myName.endIndex)]
// l
4️⃣ index(after: String.Index) : 인자로 들어온 인덱스 1칸 뒤를 가리킨다.
let myName = "YeoSeongil"
myName[myName.index(after: myName.startIndex)]
// e
5️⃣ index(String.Index, offsetBy: String.IndexDistance) : 인자로 들어온 인덱스와 offsetBy 차이만큼 떨어진 곳을 가리킨다.
let myName = "YeoSeongil"
myName[myName.index(myName.startIndex, offsetBy: 2)] // o
myName[myName.index(myName.endIndex, offsetBy: -2)] // i
let myName = "YeoSeongil"
myName[myName.endIndex] // ERR. 문자열의 인덱스를 벗어남.
myName[myName.index(myName.startIndex, offsetBy: -5)] // ERR. 문자열의 인덱스를 벗어남.
myName[myName.index(myName.endIndex, offsetBy: 2)] // ERR. 문자열의 인덱스를 벗어남.
✅ 위의 예제와 같이 문자열의 인덱스를 벗어나는 문자를 가져오려고 하면 런타임 에러가 발생한다.
for index in myName.indices {
print("\(myName[index]) ", terminator: "")
}
// Y e o S e o n g i l
✔️ 위의 예제와 같이 문자열의 개별 문자를 접근하기 위해서는 indices 프로퍼티를 사용한다.
문자의 삽입과 삭제
1️⃣ insert(char, at: String.index) : 문자열의 특정 위치에 한 개의 문자를 삽입한다.
var firstName = "seongil"
firstName.insert("?", at: firstName.endIndex)
// firstName : seongil?
2️⃣ insert(contentsOf: String, at: String.index) : 문자열의 특정 위치에 문자열을 삽입한다.
var firstName = "seongil"
firstName.insert(contentsOf: "yeo", at: firstName.index(firstName.endIndex, offsetBy:-7))
// firstName : yeoseongil
3️⃣ remove(at:) : 문자열의 특정 인덱스에 위치하는 한 개의 문자를 제거한다.
var firstName = "seongil"
firstName.remove(at: firstName.index(before: firstName.endIndex))
// firstName : seongi
4️⃣ removeSubrange(range) : 지정된 범위의 문자열을 제거한다.
var firstName = "seongil"
let range = firstName.index(firstName.endIndex, offsetBy:-1)..<firstName.endIndex
firstName.removeSubrange(range)
// seong
부분 문자열
let liverpool = "Anfield, Gerrad"
let index = liverpool.index(of: ",") ?? liverpool.endIndex
let beginning = liverpool[..<index]
// beginning : Anfield
let newString = String(liverpool)
✔️ 위의 예제와 같이 문자열에서 부분 문자를 얻기 위해 prefix (_:)와 같은 서브스크립트 메소드를 사용할 수 있는데, 그렇게 얻은 부분 문자열은 문자열 인스턴스가 아니라 부분문자열 인스턴스이다. 만약 부분 문자열을 단기간 사용하는게 아니라 오랜기간 사용한다면 메모리 관리를 위해 문자열 인스턴스로 바꿔서 사용하는 것이 좋다.
문자열과 문자 비교
let moana = "There comes a day when you’re gonna look around"
let sameMoana = "There comes a day when you’re gonna look around"
if moana == sameMoana {
print("equal")
}
// equal
✔️ 위의 예제와 같이 문자열과 문자 비교에는 == , != 연산자를 사용한다.
// "Voulez-vous un café?" using LATIN SMALL LETTER E WITH ACUTE
let eAcuteQuestion = "Voulez-vous un caf\u{E9}?"
// "Voulez-vous un café?" using LATIN SMALL LETTER E and COMBINING ACUTE ACCENT
let combinedEAcuteQuestion = "Voulez-vous un caf\u{65}\u{301}?"
if eAcuteQuestion == combinedEAcuteQuestion {
print("These two strings are considered equal")
}
// These two strings are considered equal 출력
✔️ 위의 예제와 같이 유니코드는 결합된 문자열을 갖고 비교한다.
let latinCapitalLetterA: Character = "\u{41}"
let cyrillicCapitalLetterA: Character = "\u{0410}"
if latinCapitalLetterA != cyrillicCapitalLetterA {
print("These two characters are not equivalent.")
}
// Prints "These two characters are not equivalent."
✔️ 위의 예제와 같이 같은 유니코드 문자여도 유니코드가 다르면 다른 문자로 판별한다. 위의 예제는 영어의 알파밧 대문자 A(U+0041)와 러시아어에서 사용되는 대문자 A(U+0410)을 비교한 것이다.
접두사와 접미사 비교
let romeoAndJuliet = [
"Act 1 Scene 1: Verona, A public place",
"Act 1 Scene 2: Capulet's mansion",
"Act 1 Scene 3: A room in cell Capulet's mansion",
"Act 1 Scene 4: A street outside Capulet's mansion",
"Act 1 Scene 5: The Great Hall in Capulet's mansion",
"Act 2 Scene 1: Outside Capulet's mansion",
"Act 2 Scene 2: Capulet's orchard",
"Act 2 Scene 3: Outside Friar Lawrence's cell",
"Act 2 Scene 4: A street in Verona",
"Act 2 Scene 5: Capulet's mansion",
"Act 2 Scene 6: Friar Lawrence's cell"
]
var mansionCount = 0
var cellCount = 0
var etcCount = 0;
for scene in romeoAndJuliet {
if scene.hasSuffix("mansion") {
mansionCount += 1
} else if scene.hasSuffix("cell"){
cellCount += 1
} else {
etcCount += 1
}
}
1️⃣ hasPrefix(String) : 접두사 String을 비교한다.
2️⃣ hasSuffix(String) : 접미사 String을 비교한다.
문자열 유니코드 표현
1️⃣ String.utf8 : UTF-8로 인코딩 하여 표현한다.
let dogString = "Dog!!🐶"
for codeUnit in dogString.utf8 {
print("\(codeUnit) ", terminator: "")
}
print("")
// 68 111 103 226 128 188 240 159 144 182
2️⃣ String.utf16 : UTF-16로 인코딩 하여 표현한다.
let dogString = "Dog!!🐶"
for codeUnit in dogString.utf16 {
print("\(codeUnit) ", terminator: "")
}
print("")
// 68 111 103 8252 55357 56374
3️⃣ String.unicodeScalars : 유니코드 스칼라로 표현한다.
let dogString = "Dog!!🐶"
for scalar in dogString.unicodeScalars {
print("\(scalar.value) ", terminator: "")
}
print("")
// 68 111 103 8252 128054
for scalar in dogString.unicodeScalars {
print("\(scalar) ")
}
// D
// o
// g
// !!
// 🐶
'Swift > Swift 기본기' 카테고리의 다른 글
06. 클로저 (Closures) (0) | 2023.03.18 |
---|---|
05. 함수 (Functions) (0) | 2023.03.18 |
04. 제어문 (Control Flow) (0) | 2023.03.17 |
03. 콜렉션 타입 (Collection Types) (0) | 2023.03.17 |
01. 기본 연산자 (Basic Operators) (1) | 2023.03.15 |