본문 바로가기
iOS/Swift

[Swift] String and Characters

by Jiseong 2021. 8. 24.

 

 

String and Characters


문자열 리터럴

문자열은 큰 따옴표(")로 묶어 표현된다.

 

let someString = "Some string literal value"

 

Multiline String literal - 큰 따옴표 3개로 묶어서 표현

let quotation = """
The White Rabbit put on his spectacles.  "Where shall I begin,
please your Majesty?" he asked.

"Begin at the beginning," the King said gravely, "and go on
till you come to the end; then stop."
""" //Use a multiline string literal a sequence of characters surrounded by three double question marks

 

여러줄 문자열을 사용할 때 첫 시작의 """ 다음 줄부터 마지막 """의 직전까지를 문자열로 본다.

let singleLineString = "These are the same."
let multilineString = """
These are the same.
"""

고로 이건 같은 것

 

여러줄 문자열을 사용하며 줄바꿈을 원하면 백슬래시를 사용한다 (\)

let softWrappedQuotation = """
The White Rabbit put on his spectacles.  "Where shall I begin, \
please your Majesty?" he asked.

"Begin at the beginning," the King said gravely, "and go on \
till you come to the end; then stop."
"""//multilineString line break = backslash(\)

 

문자열 시작과 끝에 빈줄을 넣길 원하면 한줄을 띄어서 입력

let lineBreaks = """

This string starts with a line break.
It also ends with a line break.

"""//line feed

 

들여쓰기도 가능하다. 들여쓰기의 기준은 끝나는 지점의 """ 위치이다. 

예시

let lineBreaks = """

This string starts with a line break.
	It also ends with a line break.

"""
/*

This string starts with a line break.
    It also ends with a line break.

*/

 

문자열 리터럴의 특수 문자

  • \0, \, \t, \n, \r, \", \'
  • \u{n}, n은 1~8자리 십진수 형태로 구성된 유니코드
let wiseWords = "\"Imagination is more important than knowledge\" - Einstein"
// "Imagination is more important than knowledge" - Einstein
let dollarSign = "\u{24}"        // $,  Unicode scalar U+0024
let blackHeart = "\u{2665}"      // ♥,  Unicode scalar U+2665
let sparklingHeart = "\u{1F496}" // 💖, Unicode scalar U+1F496

 

빈 문자열 초기화

//Init empty string
var emptyString = "" //empty string literal
var anotherEmptyString = String() //initializer syntax

 

문자열이 비어있는지 확인 - isEmpty 프로퍼티 사용

if emptyString.isEmpty {
    print("Nothing to see here")
} //Nothing to see here

 

문자열 수정

//String Mutability
var variableString = "Horse"
variableString += " and carriage"
// variableString is now "Horse and carriage"

let constantString = "Highlander"
constantString += " and another Highlander" //-> compile error
//compile error - a constant string cannot be modified

 

값 타입 문자열

Swift의 String은 값 타입이다. String이 다른 함수나 메소드로부터 생성되면, String값이 할당될 때, 이전 String의 레퍼런스를 할당하는 것이 아닌 값을 복사하여 생성한다.

 

문자 작업

 

문자열의 개별 문자를 for-in 루프를 사용해 접근 할 수 있음

for character in "Dog!🐶" {
    print(character)
}
// D
// o
// g
// !
// 🐶

 

문자 상수 선언

let exclamationMark: Character = "!"

 

문자 배열을 문자열 초기화 메소드 인자로 넣어 문자열 생성 가능

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

 

문자열과 문자의 결합

let string1 = "hello"
let string2 = " there"
var welcome = string1 + string2
// "hello there"
var instruction = "look over"
instruction += string2
//"look over there"
let exclamationMark: Character = "!"
welcome.append(exclamationMark)
//"hello there!"

 

문자열 삽입

 

백슬래쉬 괄호를 이용해 상수, 변수, 리터럴 값을 문자열에 추가 가능

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

 

문자열 접근, 수정

 

//Accessing and Modifying a String
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

 

문자열의 개별 문자 접근 - indices 프로퍼티 사용

for index in greeting.indices {
    print("\(greeting[index]) ", terminator: "")
}
//"G u t e n   T a g ! "

 

문자열 삽입, 삭제

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"

 

접두사 접미사 비교

접두어 hasPrefix(:), 접미어 hasSuffix(:)

//Prefix and Suffix Equality
let romeoAndJuliet = [
    "Act 1 Scene 1: Verona, A public place",
    "Act 1 Scene 2: Capulet's mansion",
    "Act 1 Scene 3: A room in 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 act1SceneCount = 0
for scene in romeoAndJuliet {
    if scene.hasPrefix("Act 1 ") {
        act1SceneCount += 1
    }
}
print("There are \(act1SceneCount) scenes in Act 1")
//"There are 5 scenes in Act 1"
var mansionCount = 0
var cellCount = 0
for scene in romeoAndJuliet {
    if scene.hasSuffix("Capulet's mansion") {
        mansionCount += 1
    } else if scene.hasSuffix("Friar Lawrence's cell") {
        cellCount += 1
    }
}
print("\(mansionCount) mansion scenes; \(cellCount) cell scenes")
//"6 mansion scenes; 2 cell scenes"

 

 

문자열과 문자를 알아봤다.

 

기본부터 탄탄히 기탄수학

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

'iOS > Swift' 카테고리의 다른 글

[Swift] Control Flow  (1) 2021.09.08
Design Pattern - MVC  (0) 2021.08.31
[Swift] API Design Guidelines  (0) 2021.08.24
[Swift] Optional (2)  (0) 2021.08.19
[Swift] Optional (1)  (0) 2021.08.18

댓글