상세 컨텐츠

본문 제목

[Swift] 문자 및 문자열

Mobile

by Yoonsang's Log 2022. 1. 1. 17:41

본문

Swift 는 String 타입으로 문자열을 나타낼 수 있다. (e.g. "Hello, World")

C와 마찬가지로 String 타입의 문자열 각 문자 하나하나를 Character 타입으로 접근할 수 있다.

String 유형은 Foundation 의 NSString 클래스와 연결된다. 

NSString 클래스는 Foundation에 속해져 있으므로

Foundation만 Import 하면

NSString에 접근할 수 있고 캐스팅 없이 String에 접근할 수 있다.

 

문자열 리터럴 (String Literals)

String 코드 내에 문자열 리터럴로 미리 정의된 값을 할당할 수 있다. 즉 초기화 값을 줄 수 있다.

let someStr = "문자열 초기화 가능"

또한 여러 줄로 값을 할당해줄 수도 있다.

let multilineStr = """
여러줄을 삽입할 수도 있습니다.여러줄을 삽입할 수도 있습니다.여러줄을 삽입할 수도 있습니다.
여러줄을 삽입할 수도 있습니다.여러줄을 삽입할 수도 있습니다.여러줄을 삽입할 수도 있습니다.
여러줄을 삽입할 수도 있습니다.여러줄을 삽입할 수도 있습니다.여러줄을 삽입할 수도 있습니다.
"""

줄바꿈이 포함되게 하고 싶지 않으면 역슬래시 ( \ ) 를 포함하여 줄바꿈 해주면 문자열에 줄바꿈이 포함되지 않는다.

 

빈 문자열 초기화(Initializing Empty String)

비어 있는 문자열 "" 로 할당해서 문자열을 초기화 해줄 수 있다.

String() 구문을 이용해서 초기화 해줄 수도 있다.

var emptyString = ""
var emptyStringSyntax = String()

String().isEmpty 속성으로 문자열이 비어있는지 확인할 수 있다.

 

문자열 가변성(String Mutability)

문자열은 수정될 수 있다!

var varStr = "안녕"
varStr += "하세요."
// varStr => 안녕하세요.

 

문자열은 값 유형 (Strings Are Value Type)

Swift의 String은 value 타입이다.

String 타입 값을 생성하고 그 문자열이 복사되어져서 함수나 메소드에 전달되었거나 상수나 변수로 할당 되었다면

새로 복사된 문자열 값이 전달되어지고, 할당된다.

즉, copy-by-default는 직접 기존에 생성된 문자열을 수정하지 않는 한 수정되지 않는다.

파이썬 깊은 복사 - 얕은 복사와 비슷한것 같다.

정리하면 인스턴스가 완전히 독립적이고 메모리를 별도로 할당받는다. (주소값이 다르다)

 

캐릭터 타입 작업 (Working with Characters)

루프를 통해서 String 개별 값 Character에 접근할 수 있다.

 

문자열과 문자 연결(Concatenating Strings and Characters)

+ , += 연산자를 통해 문자열을 연결할 수 있다.

또한 String().append() 메소드를 통해서 값을 추가할 수도 있다.

이는 여러줄의 문자열 리터럴도 마찬가지로 해당된다.

 

문자열 보간 (String Interpolation)

문자열에 상수, 변수, 리터럴을 삽입할 수 있다.

let greeting = "안녕하세요."
let message = "\(greeting) 는 한국의 인사말입니다."
// message => 안녕하세요. 는 한국의 인사말입니다.

확장 문자열 구분 기호(#) 을 사용하면 문자열 보간으로 처리될 문자가 그대로 포함된 문자열을 생성할 수 있다.

print("\(greeting) 는 한국의 인사말입니다.")
// => \(greeting) 는 한국의 인사말입니다.

확장 문자열 구분 기호를 사용하는 문자열 내에 문자열 보간을 사용하고 싶으면 역슬래쉬( \ ) 뒤에 나타낼 수 있다.

print(#"6 times 7 is \#(6 * 7)."#)
// Prints "6 times 7 is 42."

 

유니 코드 (Unicode)

한글의 한글 음절은 사전 구성 또는 분해 시퀀스로 표시될 수 있다.

let precomposed: Character = "\u{D55C}"                  // 한
let decomposed: Character = "\u{1112}\u{1161}\u{11AB}"   // ᄒ, ᅡ, ᆫ
// precomposed is 한, decomposed is 한

 

문자 세기 (Counting Characters)

문자열에서 Character 값 개수를 검색하려면 count 속성을 사용할 수 있다.

let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪"
print("unusualMenagerie has \(unusualMenagerie.count) characters")
// Prints "unusualMenagerie has 40 characters"

이는 문자 값의 확장된 grapheme clusters 사용한 문자열 연결 및 수정이

문자열의 문자 수에 항상 영향을 미치지 않을 수 있음을 의미한다.

Swift 에서 문자는 각각 메모리 양이 다를 수 있다. 

 

문자열 액세스 및 수정 (Accessing and Modifying a String)

메소드 및 속성을 이용하거나 아래 첨자 구문을 사용해 문자열에 접근하고 수정할 수 있다.

startIndex : 첫번째 위치에 접근

endIndex : 마지막 위치에 접근

index(before : ) : 해당 위치의 앞 인덱스

index(after : ) : 해당 위치의 뒤 인덱스

index( _:offsetBy : ) : _ 부터 ~ 위치의 인덱스

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

greeting[greeting.endIndex] // Error
greeting.index(after: greeting.endIndex) // Error

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

insert("문자", at : ) : 문자 혹은 문자열을 원하는 위치에 삽입

remove(at : ) : 원하는 위치 혹은 범위의 문자 혹은 문자열을 삭제

var welcome = "hello"
welcome.insert("!", at: welcome.endIndex)
// welcome now equals "hello!"

welcome.insert(contentsOf: " there", at: welcome.index(before: welcome.endIndex))
// welcome now equals "hello there!"

welcome.remove(at: welcome.index(before: welcome.endIndex))
// welcome now equals "hello there"

let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
welcome.removeSubrange(range)
// welcome now equals "hello"

 

부분 문자열(Substring)

문자열 작업하는 방식과 동일한 방식으로 작업 가능하다.

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

// Convert the result to a String for long-term storage.
let newString = String(beginning)

 

문자열 비교 (Comparison Strings)

문자열 비교는 세가지 방법이 있다.

- 문자열 및 문자 동일성 (String and character equailty)

- 접두어 동일성 (prefix equality)

- 접미사 동일성 (suffix equaility)

(==) 연산자를 통해서 비교하는 등 연산자들을 통해  비교할 수 있다.

 

[자료 출처]

https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html#//apple_ref/doc/uid/TP40014097-CH7-ID285

 

Strings and Characters — The Swift Programming Language (Swift 5.5)

Strings and Characters A string is a series of characters, such as "hello, world" or "albatross". Swift strings are represented by the String type. The contents of a String can be accessed in various ways, including as a collection of Character values. Swi

docs.swift.org

 

'Mobile' 카테고리의 다른 글

[Swift] 함수  (0) 2022.01.01
[Swift] 제어 흐름  (0) 2022.01.01
[Swift] 컬렉션 유형  (0) 2022.01.01
[Swift] 기본 연산자  (0) 2022.01.01
[Swift] 첫 시작과 계기, 기초  (0) 2022.01.01

관련글 더보기

댓글 영역