코딩코오딩

[Swift] String - #7 Initializer(1) : Creating a String from Unicode Data

coding. 2020. 2. 18. 14:21

Creating a String

init()

- 빈 문자열을 생성합니다. 

 

 

init(_ c: Character)

- Character를 초기값으로해서 문자열을 생성 합니다.

 

 

init(_ characters: S) where S : Sequence, S.Element == Character

init(_ elements: S) where S : Sequence, Self.Element == S.Element

init(_ other: S) where S : LosslessStringConvertible, S : Sequence, S.Element == Character

- Sequence protocol을 따르는 instance를 통해서 문자열을 초기화 합니다.

 

 

init(_ substring: Substring)

- Substring 타입으로 문자열을 초기화 합니다.

 

 

init(repeating repeatedValue: String, count: Int)

init(repeating:count:)

- 파라미터로 전달받은 String이나 Character를 count 만큼 반복해서 문자열을 초기화 합니다.

 

let s = String(repeating: "ab", count: 10) print(s) // Prints "abababababababababab" let zeroes = String(repeating: "0" as Character, count: 10) print(zeroes) // Prints "0000000000"

 

Creating a String from Unicode Data

init(_ scalar: Unicode.Scalar)

- Unicode scalar를 사용하여 초기화 합니다.

 
 

init?(data: Data, encoding: String.Encoding)

- Data를 사용해서 초기화 합니다.

 

 

init?(utf8String bytes: UnsafePointer<CChar>)

- UTF-8로 인코딩 된 bytes array를 사용하여 문자열을 초기화 합니다.

 

 

init?(validatingUTF8 cString: UnsafePointer<CChar>)

- 이 초기화 함수는 잘못된 포맷의 UTF-8 코드 시퀀스를 복구하려고 시도하지 않습니다. 아래의 코드는 첫 번째는 유효한 코드로 초기화 하여 Cafe를 출력하고, 두 번째는 잘못된 코드 시퀀스로 되어있어 초기화에 성공하지 못해 nil을 리턴하는 것을 보여줍니다.

 

import Foundation

let validUTF8: [CChar] = [67, 97, 102, -61, -87, 0]
validUTF8.withUnsafeBufferPointer { ptr in
    let s = String(validatingUTF8: ptr.baseAddress!)
    print(s)
}
// Prints "Optional(Café)"

let invalidUTF8: [CChar] = [67, 97, 102, -61, 0]
invalidUTF8.withUnsafeBufferPointer { ptr in
    let s = String(validatingUTF8: ptr.baseAddress!)
    print(s)
}
// Prints "nil"

 

 

init(utf16CodeUnits: UnsafePointer, count: Int)

- 지정된 유니코드 문자열 배열에서 지정된 수의 문자가 포함된 초기화된 문자열 개체를 반환합니다.

 

 

init(utf16CodeUnitsNoCopy: UnsafePointer, count: Int, freeWhenDone flag: Bool)

- UTF-16 코드 유닛의 지정된 배열에서 지정된 수의 문자가 포함된 초기화된 문자열 개체를 반환합니다. 

 

 

init<C, Encoding>(decoding codeUnits: C, as sourceEncoding: Encoding.Type)

                       where C : Collection, Encoding : _UnicodeEncoding, C.Element == Encoding.CodeUnit

- sourceEncoding 파라미터로 전달받은 인코딩 방식의 유니코드 코드 유닛 Collection으로 문자열을 생성합니다.