GGURUPiOS

Swift 공식 문서 정리 - (3) Strings and Characters 본문

Swift/공식문서 정리 ( 문법 )

Swift 공식 문서 정리 - (3) Strings and Characters

꾸럽 2023. 4. 19. 15:20

String And Characters ( 문자열과 문자 )

문자열 리터럴

문자열 리터럴은 큰 따옴표로 둘러싸인 일련의 문자임

let someString = “Some”

여러 줄 문자열 리터럴 ( “”” )

큰 따옴표 세개로 표현 가능

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."
"""

// 소스 코드에 줄바꿈이 포함되어 있으면 문자열 값에도 적용됨
// 줄 바꿈을 사용하고 싶지만, 문자열 값은 변하지 않도록 하려면 해당 줄 끝에 \\ 를 작성 
// 아래와 같은 모습

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."
"""

문자열 리터럴의 특수문자

  • 이스케이프된 특수 문자 \\0(null 문자), \\\\(백슬래시), \\t(가로 탭), \\n(줄 바꿈), \\r(캐리지 리턴), \\"(큰따옴표) 및 \\'(작은따옴표)
  • \\\\u{n 으로 작성된 임의의 유니코드 스칼라 값 }

확장 문자열 구분 기호 (#)

확장 구분 기호 내에 문자열 리터럴을 배치해서 특수 문자를 포함 할 수 있음

let threeMoreDoubleQuotationMarks = #"""
Here are three more double quotes: """
"""#

빈 문자열 초기화

var emptyString = ""
var anotherEmptyString = String() 

// 두가지 방법으로 초기화 가능

isEmpty 속성으로 값이 빈 값은지 확인 가능 
if emptyString.isEmpty { print("Nothing") }

문자열은 값 유형

값 유형은 함수나 메서드에 전달되거나 할당될 때 복사 됨

캐릭터 작업

for 문 을 사용하여 개별값에 액세스 할 수 있음

for character in "Dog" {
	print(character)
}
// D, o, g 각각 한 번씩 세 번 출력됨

문자열과 문자 연결

String은 더하기 연산자와 함께 연결 할 수 있음

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

var instruction = "look over"
instruction += string2 // "look over there"

// append를 사용해서 추가 가능
let someWord = "hi"
welcome.append(someWord) // "hello there hi"

문자열 보간

문자열 보간이란 문자열 리터럴 내에 상수, 변수, 리터럴 및 식의 혼합에서 새 값을 생성하는 방법

(그냥 단순히 문자열 내에 \()를 활용해서 상수, 변수 값을 사용할 수 있다는 말 인듯)

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

유니코드

String과 Character유형은 유니코드와 호환됨

문자열을 유니코드 스칼라 시퀀스를 사용해서 표현할 수 있다는 것 같음

실제로 유니코드를 쓰는 것을 보지 못해서 나중에 필요 할 때 더 공부해보는 편이 나아보임.

유니코드 스칼라? → 유니코드 "문자"에 배당된 숫자로, 통상 "U+" 뒤에 4~6자리 16진수로 표기한다. ex) U+000

문자 세기

count 속성으로 셀 수 있음

let word = "hello"
print(word.count) // 5

문자열 액세스 및 수정

문자열 인덱스

문자열의 각 값에는 인덱스로 접근 할 수 있음

하지만 문자열은 정수 값으로 인덱싱 할 수 없음.

따라서 startIndex, endIndex, index(before:), index(after:), index(_:offsetBy:) 메소드 등을 이용해 문자열에서 접근 가능

let word = "hello world!"
print(word[word.startIndex]) // h
print(word[word.index(before: word.endIndex)]) // ! 출력
print(word[word.index(after: word.startIndex)]) // e 출력

let index = word.index(word.startIndex, offsetBy: 7)
print(word[index]) // o 출력  

개별 문자에 접근 indices 프로퍼티 활용

for index in word.indices {
	print("\\(word[index]) ", terminator: "")
}
// h e l l o  w o r l d !출력

문자의 삽입과 삭제

insert(: at:), insert(contentsOf: at:), remove(at:), removeSubrange(:) 메소드 사용 가능

var welcome = "hello"
welcome.insert("!", at: welocme.endIndex) 
// hello! 끝 부분에 ! 삽입
welcome.insert(contentsOF: "there", at: welcome.index(before: welcom.endIndex))
// hello there! 끝부분 전에 there 삽입
welcome.remove( at: welcome.index(before: welcom.endIndex))
// hello there
let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
welcome.removeSubrange(range)
// hello

부분 문자열

부분 문자열은 prefix (_:)와 같은 메소드를 사용해서 잘라낼 수 있다.

그렇지만 String이 아닌 SubString 인스턴스이기 때문에 오래사용 한다면 문자열 인스턴스로 변환 후 사용하는것이 좋다.

→ 메모리 관리 때문, SubString은 원본 String의 메모리를 참조해서 사용함.

문자열과 문자 비교

==, != 연산자 사용

Swift에서 문자열과 문자의 비교는 언어를 고려하지 않음, 언어와 상관없이 같은문자면 같은 문자로 취급

접두사와 접미사 비교

hasPrefix(:), hasSuffix(:) 메소드 사용

var someString = "Act 1 Scene 1"
if someString.hasPrefix("Act 1") { print("True") } // 접두사가 Act 1 인지 확인 ->  True 출력 

if someString.hasSuffix("Scene 1" { print("True") } // 접미사가 Scene 1 인지 확인 -> True 출력