티스토리 뷰

출처

http://kka7.tistory.com/5



Swift 의 String 타입은 Foundation 의 NSString 클래스와 bridged 되어있다.
Foundation 은 NSString 에 의해 정의된 메소드들을 사용하기 위해 String 을 확장한다.
이는 Foundation 을 포함하면 String 에서 변환(casting) 없이 
NSString 메소드를 접근할 수 있다는 의미이다.


문자열 

선언

let someString = "Some string literal value"



빈 문자열 초기화

var emptyString = String()

var anotherEmptyString = ""




if emptyString.isEmpty {

    print("empty string")

}



문자열은 값 타입이다. 

Swift 의 String 타입은 값 타입니다.

새로운 String 값을 만들면 String 값을 함수나 메소드에 전달될 때

또는 상수나 변수에 할당할 때 복사된다. (copied)


각각의 경우 기존 String 의 새로 복사된 값은 생성되고 

새로 복사된 값은 원래 버전이 아니며 전달되거나 할당된다.


컴파일러는 필요한 경우에만 실제 복사가 일어나도록

문자열 사용을 최적화해준다.

값 타입처럼 문자열을 작업할 때 항상 좋은 성능을 가지는 것을 의미한다.



문자로 작업하기 (Working with Characters)

Characters 선언은 String 과 같다.

let character : Character = "!"



characters 프로퍼티를 for-in 반복문으로 반복하여 String 에 대한
개개의 character 값에 접근할 수 있다.

for character in "Dog!🐶".characters {

    print(character)

}



String 값은 초기화 인자 값처럼 

Character 의 배열 값을 전달하여 구성될 수 있다.


let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"]

let catString = String(catCharacters)

print(catString)




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

더하기로 연결할 수 있다.

let string1 = "hello"

let string2 = " there"

var welcome = string1 + string2

welcome += "!"

print(welcome)



character 와의 연결은 append() 로 가능하다.


let exclamationMark: Character = "!"

welcome.append(exclamationMark)




문자열 삽입 (String Interpolation)

String Interpolation은 상수, 변수, 원문 (literals) 에 값을 포함한 표현을 혼합하여
새로운 String 을 구성하는 방법이다.
아래와 같이 \( .. ) 를 이용하여 표현한다.

let multiplier = 3

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







유니코드

유니코드는 인코딩, 표현, 다른 시스템에서의 문자열 처리에 대한 국제 표준이다.
거의 모든 문자를 표현하는 것이 가능하다.


유니코드 스칼라 (Unicode Scalars)

String 은 유니코드 스칼라 값으로 만들어진다.

유니코드 스칼라는 유니코드 코드 포인트이다.

"a" -> U+0061
"🐥" -> U+1F425
처럼 문자나 수정에 대해 고유한 21비트 숫자로 이루어졌다.

21비트 스칼라 전부 문자에 할당되는 것은 아니다.
몇가지 스칼라는 미래에 할당하기 위해 예비로 남겨둔다.
할당된 스칼라는 일반적인 문자로 이름을 가지고있다.


특수문자 ( \\, \n, \r, \t, \", \', 0)

let wiseWords = "\"Imagination is more important than knowledge\" - Einstein" 

// "Imagination is more important than knowledge" - Einstein 

let dollarSign = "\u{24}" // $, Unicode scalar U+0024 

let blackHeart = "\u{2665}" // , Unicode scalar U+2665 

let sparklingHeart = "\u{1F496}" // 💖, Unicode scalar U+1F496







문자열 관련 Method

count

let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪"

print("\(unusualMenagerie.characters.count) characters")    // 40 characters"


let koala = "🐨"

print ("\(koala.characters.count) characters")  // 1 characters



Character 값에 대해 확장된 문자단위 클러스터를 사용하여 문자열 연결하는 것과
문자열의 글자 수에 영향이 미치지 않을 수 있다.

var word = "cafe"

print("the number of characters in \(word) is \(word.characters.count)")

// Prints "the number of characters in cafe is 4"


word += "\u{301}" // COMBINING ACUTE ACCENT, U+0301 


print("the number of characters in \(word) is \(word.characters.count)")

// Prints "the number of characters in café is 4"



접근과 수정, indices

특정 String 의 Character 에 접근하기 위해 인덱스 subscript 문법을 사용한다.

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



index 범위를 벗어난 곳에 접근하려 하면 runtime error 가 발생한다.

greeting[greeting.endIndex] // error 

greeting.index(after: endIndex) // error



indices 는 문자열에서 각각 문자의 모든 인덱스에 접근하기 위해 사용한다.

for index in greeting.characters.indices {

    print("\(greeting[index]) ")

}




삽입과 제거

문자열의 지정된 인덱스에 문자를 삽입할 때 insert 를 사용한다.

var welcome = "hello"

welcome.insert("!", at: welcome.endIndex)

// "hello!"

welcome.insert(contentsOf:" there".characters,

               at: welcome.index(before: welcome.endIndex))

// "hello there!"



문자를 제거하려면 remove, removeSubrange 를 사용한다.

var welcome = "hello there!"

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


let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex

welcome.removeSubrange(range)   //"hello"




문자열 비교

== 연산자를 사용하여 동등비교를 할 수 있다.

let quotation = "We're a lot alike, you and I."

let sameQuotation = "We're a lot alike, you and I."


if quotation == sameQuotation {

    print("These two strings are considered equal")

}




접두사, 접미사 동등 비교


let romeoAndJuliet = [ "Act 1 Scene 1: Verona, A public place",

                       "Act 1 Scene 2: Capulet's mansion",

                       "Act 1 Scene 3: A room in Capulet's mansion",

                       "Act 1 Scene 4: A street outside Capulet's mansion",

                       "Act 1 Scene 5: The Great Hall in Capulet's mansion",

                       "Act 2 Scene 1: Outside Capulet's mansion",

                       "Act 2 Scene 2: Capulet's orchard",

                       "Act 2 Scene 3: Outside Friar Lawrence's cell",

                       "Act 2 Scene 4: A street in Verona",

                       "Act 2 Scene 5: Capulet's mansion",

                       "Act 2 Scene 6: Friar Lawrence's cell" ]


var act1SceneCount = 0

for scene in romeoAndJuliet {

    if scene.hasPrefix("Act 1 ") {

        act1SceneCount += 1

    }

}


print("There are \(act1SceneCount) scenes in Act 1")    // 5






문자열의 유니코드 표현

문자열의 유니코드 스칼라는 
몇몇 유니코드 정의된 인코딩 방식 중 하나로 인코딩된다.

각 인코딩 방식은 코드 단위로 알려진
작은 덩어리로 문자열을 암호화한다.


let dogString = "Dog🐶"


for utf8unit in dogString.utf8 {

    print(utf8unit)     //68 111 103 226 128 188 240 159 144 182

}


for utf16unit in dogString.utf16 {

    print(utf16unit)    //68 111 103 8252 55357 56374

}


for scalar in dogString.unicodeScalars {

    print(scalar.value) //68 111 103 8252 128054

}




공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함