맛동산이

스위프트 스터디 2탄) 문자열과 문자(string and characters) 본문

앱/Swift 문법

스위프트 스터디 2탄) 문자열과 문자(string and characters)

진ddang 2023. 7. 8. 16:14

 

스위프트 공식문서를 참조하였습니다.



문자열 선언

var emptyString =""  let anotherString = String();

이처럼 선언 할수 있음.

빈 문자열을 확인하는 방법은 isEmpty 프로퍼티를 사용하면된다.

if emptyString.isEmpty { 	print ( "string is empty" )} // string is empty 출력됨.

 

문자열 수정

var variableString = "Horse" variableString += " King" print (variableString) // Horse King  let constString ="Hi" constString +="my friend" // 에러남. 상수인 let으로 선언되어 있기 때문

값 타입 문자열

문자열은 value type이다. 즉 다른 메소드에서 할당 받은 문자열은, 그 자체를 수정하더라도 reference 처럼 원본 문자열이 변화 하는것이 아니기 때문에, 편하게 수정이 가능하다.

 

문자

for in loop 를 통해서 문자열에 접근 할수 있다.

var character = myfriend for a in character { 	print(character)} // m // y // f // r // i // e // n // d

 

문자열 결합 방법

결합방법은 3가지가 있다.

  1. 이항연산자를 통해서 결합
  1. 합성연산자를 통해서 결합
  1. append() 메쏘드를 사용해서 결합
// 문자열 선언 let string1 = "hellow" let string 2 = " there" // 이항연산자를 통한 결합 let welcome = string1 + strign2 //welcome : "hellow there"  //합성연산자를 통한 결합 string1 += string2 // string1 :  "hellow there"  //append()를 사용함 let mark = "!" welcome.append(mark) //welcome : "hellow there!"

 

문자열 삽입

문자열에서는 백슬래쉬를 사용하여 상수, 변수, 리터럴 값을 문자열에 삽입할수 있다.

let three = 3 let messege ="\(three) times 2.5 = \(Double(three) * 2.5)" // messege : " 3 times 2.5 = 7.5"

 

문자세기

문자열의 문자 수는

count

프로퍼티를 사용하면 된다.

let countString = "hellow my friend" print(" countString has \(countString.count)") // "countString has 17 // 빈칸도 카운트 됨.

 

문자열 인덱스

문자열은

startIndex, endIndex, index(before: ) ,index(after: ), 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

 

문자열 개별 접근

문자열 개별 접근에서는

indices

를 사용하면 된다.

for index in greeting.indices {     print("\(greeting[index]) ", terminator: "") // G u t e n  T a g !

 

문자열의 삽입과 삭제

문자열 삽입과 삭제에는

insert(:at:), insert(contentsOf:at:), remove(at:) ,removeSubrange(:)

를 통해서 접근가능하다.

var welcome = "hello" welcome.insert("!", at: welcome.endIndex) // welcome : hello!  welcome.insert(contentsOf: " there", at: welcome.index(before: welcome.endIndex)) // welcome : hello there!  welcome.remove(at: welcome.index(before: welcome.endIndex)) // welcome : hello there  let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex welcome.removeSubrange(range) // welcome : hello

insert(:at:)은 앞에 들어갈 문자열을 입력하고 at 이후에 인덱스를 이용해서 넣을 위치를 지정해준다.

contentsOf도 동일하게 contentsOf 이후에 삽입할 문자열을, 그리고 at에는 인덱스를 이용하여 위치를 잡아준다.

remove도 동일하게 인덱스를 잡아준다.

removeSubrang는 범위를 지정해주고 사용가능

 

부분문자열

문자열에서 부분문자를 얻기 위해서는 prefix(_: ) 와 같은 메쏘드를 사용할수 있지만, 해당 메쏘드를 사용하면 String 값이 아닌 subString 값이 나온다.

하지만 subString값은 reference value 이며, 이 때문에 원본 String이 계속해서 메모리에 남게 된다. 따라서 해당 subString을 계속해서 두는것은 메모리 낭비기 때문에 String으로 형변환 해서 저장하는것이 바람직 하다.

 

문자열과 문자비교

문자열의 비교에는

==

혹은

!=

과 같은 비교연산자를 사용 할수 있다.

 

접두사와 접미사 비교

hasPrefix( : ) hasSuffix( : )

를 통해서 접두사와 접미사가 있는지 확인 가능하다.

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 remeoAndJuliet {     if scene.hasPrefix("Act 1 ") {         act1SceneCount += 1     } } print("There are \(act1SceneCount) scenes in Act 1") // There are 5 scenes in Act 1

 


Uploaded by

N2T
반응형