Swift - 문자열과 문자

10936 단어

문자열 리터럴



문자열 리터럴은 큰따옴표(")로 둘러싸인 일련의 문자입니다.

example : 
let someString = "Some string literal value"


여러 줄 문자열 리터럴



여러 줄 문자열 리터럴 - 세 개의 큰따옴표로 둘러싸인 일련의 문자.
예시 :

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


줄 바꿈을 사용하여 소스 코드를 읽기 쉽게 만들고 싶지만 줄 바꿈이 문자열 값의 일부가 되지 않도록 하려면 해당 줄 끝에 백슬래시를 작성합니다.

문자열 리터럴의 특수 문자



이스케이프된 특수 문자
\0(널 문자),
\(백슬래시),
\t(가로 탭),
\n(줄 바꿈),
\r(캐리지 리턴),
\"(큰따옴표) 및
\'(작은따옴표)

확장 문자열 구분 기호



확장 구분 기호 내에 문자열 리터럴을 배치하여 해당 효과를 호출하지 않고 문자열에 특수 문자를 포함할 수 있습니다. 문자열을 따옴표(") 안에 넣고 숫자 기호(#)로 둘러쌉니다.

예시 :

var string1 = #"Line 1\nLine 2"#   
var string2 = #"Line 1\#nLine 2"#
print(string1) // Line 1\nLine 2
print(string2) // Line 1
               // Line 2


Swift의 String 타입은 값 타입입니다.
즉, 값이 새 변수나 상수에 할당되거나 매개변수로 함수에 전달될 때마다 값의 새 복사본이 생성됩니다.

성격



독립형 문자 상수 또는 변수는 문자 유형 주석을 제공하여 단일 문자 문자열 리터럴에서 생성할 수 있습니다.

예시 :

let exclamationMark: Character = "!"



문자열 보간



문자열 보간은 상수, 변수, 리터럴 및 식의 혼합에서 새 문자열 값을 구성하는 방법입니다.

예시 :

let container = 3
let message = "container has \(container)"
// "container has 3"


  • 문자마다 저장할 메모리 양이 다를 수 있으므로 특정 위치에 있는 문자를 확인하려면 해당 문자열의 시작 또는 끝에서 각 유니코드 스칼라를 반복해야 합니다. 이러한 이유로 Swift 문자열은 정수 값으로 인덱싱할 수 없습니다.



  • 문자열 속성 및 메서드



    시작 인덱스
    endIndex
    색인(이전:)
    인덱스(이후:)
    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
    


    Collection 프로토콜을 준수하는 모든 유형에서 startIndex 및 endIndex 속성과 index(before:), index(after:) 및 index(:offsetBy:) 메서드를 사용할 수 있습니다. 여기에는 여기에 표시된 대로 String과 Array, Dictionary 및 Set과 같은 컬렉션 유형이 포함됩니다.
    _

    insert(_:at:) - 지정된 인덱스의 문자열에 단일 문자를 삽입하려면,
    insert(contentsOf: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!"
    


    remove(at:) - 지정된 인덱스의 문자열에서 단일 문자를 제거하려면
    removeSubrange(_:) - 지정된 범위에서 하위 문자열을 제거합니다.

    예시 :

    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"
    


    RangeReplaceableCollection 프로토콜을 준수하는 모든 유형에서 insert(:at:), insert(contentsOf:at:), remove(at:) 및 removeSubrange(:) 메서드를 사용할 수 있습니다. 여기에는 여기에 표시된 대로 String과 Array, Dictionary 및 Set과 같은 컬렉션 유형이 포함됩니다.


    하위 문자열



    문자열의 하위 문자열은 다른 문자열이 아닌 하위 문자열의 인스턴스입니다.

    문자열과 하위 문자열의 차이점은 성능 최적화로서 하위 문자열은 원래 문자열을 저장하는 데 사용되는 메모리의 일부 또는 다른 하위 문자열을 저장하는 데 사용되는 메모리의 일부를 재사용할 수 있다는 것입니다.

    하위 문자열은 장기 저장에 적합하지 않습니다. 원래 문자열의 저장소를 재사용하기 때문에 하위 문자열이 사용되는 동안 전체 원본 문자열을 메모리에 보관해야 합니다.

    하위 문자열을 String 인스턴스로 변환합니다.

    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)
    


    String과 Substring은 모두 StringProtocol 프로토콜을 따릅니다. 즉, 문자열 조작 함수가 StringProtocol 값을 받는 것이 편리한 경우가 많습니다. String 또는 Substring 값을 사용하여 이러한 함수를 호출할 수 있습니다.


    문자열 비교


  • 문자열 및 문자 같음(== 및 !=)
  • 접두사 같음( hasPrefix(_:) ) - 문자열 접두사 비교
  • 접미사 같음( hasSuffix(_:) ) - 문자열 접미사 비교
  • 좋은 웹페이지 즐겨찾기