[Swift] 문자열

zinnnn37·2024년 6월 24일
0

🐦‍🔥 Swift

목록 보기
7/7

Swift는 문자열 다루기가 엄청 어렵다는 글을 봐버렸다....

💬 문자열

📍 Swift는 대괄호를 통한 문자열 접근이 불가능하다!
📍 String.Index를 대신 사용해야한다

🗂️ 문자열 인덱스 구하기

  • startIndex: 문자열의 시작 요소 인덱스
  • endIndex: 문자열의 마지막 요소 인덱스의 다음 요소의 인덱스
  • index(before: String.Index): 인자로 들어온 인덱스의 한 칸 앞 요소 인덱스
    → ⚠️ 따라서 맨 마지막 문자의 인덱스를 얻고 싶다면 str[str.index(before: str.endIndex)]로 접근해야 한다!
  • index(after: String.Index): 인자로 들어온 인덱스 한 칸 뒤 요소 인덱스
  • index(String.Index, offsetBy: String.IndexDistance): 인자로 들어온 인덱스로부터 IndexDistance만큼 떨어진 요소 인덱스
    → e.g. str.index(str.startIndex, offsetBy: 2] == str[2]
  • firstIndex(of: Character): 인자로 들어온 문자와 일치하는 요소 중 가장 먼저 나오는 인덱스
  • lastIndex(of: Character): 인자로 들어온 문자와 일치하는 요소 중 가장 뒤에 나오는 인덱스

🪙 문자열 삽입

📍 insert(_, at:): 문자열의 특정 인덱스에 다른 문자를 삽입하고 싶은 경우 사용한다
📍 insert(contentsOf:, at:): 문자열의 특정 인덱스에 다른 문자열을 삽입하고 싶은 경우 사용한다


🧹 문자열 삭제

📍 remove(at:): 특정 인덱스의 문자를 삭제할 때 사용한다
→ 제거된 값이 반환된다
📍 removeSubrange(range): 특정 범위 안의 부분문자열을 삭제할 때 사용한다
→ 제거되고 남은 값이 반환된다

var str = "Hello, World!"

str.remove(at: str.index(str.startIndex, offsetBy: 5)) // "," 반환
str	// Hello World!

let range = str.index(str.endIndex, offsetBy: -7)..<str.endIndex // " World!"에 해당하는 범위
str.removeSubrange(range) // "Hello" 반환
str // Hello

⚖️ 문자열 비교

📍 비교연산자를 이용해 비교 가능하다

🐍 접두사와 접미사 비교

📍 hasPrefix(str): 매개변수로 받은 접두사를 가지고 있는지 확인한다
📍 hasSuffix(str): 매개변수로 받은 접미사를 가지고 있는지 확인한ㄷ
📍 반환 값은 Boolean이다

👛 문자열 교체

📍 str.replacingOccurences(of: target, with: toChange): 특정 글자를 다른 글자로 대체할 때 사용한다
📍 Foundation 프레임워크가 필요하다

import Foundation

var str = "Hello world!"
str.replacingOccurences(of: "Hello", with: "hello")

👇 Subscript

📍 클래스, 구조체, 열거형에서 시퀀스의 멤버요소에 접근할 수 있도록 한다
📍 배열 등에서 []로 요소에 접근하는 것도 subscript이다
→ 배열의 subscript는 매개변수로 Int형을 받고, 해당 인덱스의 요소를 반환하는 것

📝 subscript 오버로딩

📍 subscript를 오버로딩한다면 String 타입도 []를 이용해 인덱스만으로도 해당 인덱스의 요소를 가져오도록 할 수 있다

public extension StringProtocol {
    subscript (i: Int) -> Element {
        return self[index(startIndex, offsetBy: i)]
    }
}

let str = "Hello"
print(str[2]) // l


📑 Reference

Swift 공식문서: Subscript
Swift 공식문서: 문자열과 문자

profile
😎노션 상주 중,,😎

0개의 댓글