컴퓨터/android, ios

[Swift] Swift 기초 문법 1. 문자열과 문자

정석이 2022. 7. 1. 16:07

 

스위프트 공부를 시작하기로 했다.

 

열심히 해서 ios 개발 도전해야지!

이미 만들고싶은거 산더미임 만들면 앱스토어에 꼭 내야지!

 

그래서 얼른 기초 문법 공부를 시작하려고 한다.

 

 

근데 스위프트 굉장히 어렵네요....

 

 


 

 

상수와 변수 선언

 

스위프트는 특이하게 상수인지 변수인지를 먼저 선언하고 변수 타입을 설정한다.

 

심지어 변수 타입은 설정하지 않아도 됨...

 

 

// 상수와 변수 선언
let 상수이름: 타입 = 값
var 변수이름: 타입 = 값

// 값의 타입이 명확하다면 타입 생략 가능
let 상수이름 = 값
var 변수이름 = 값

// 상수와 변수 활용
let constant: String = "차후에 변경이 불가능한 상수 let"
var variable: String = "차후에 변경이 가능한 변수 var"

 

 

 

 

문자열 리터럴

 

문자열은 큰 따옴표(")로 묶어서 표현한다.

 

let a = "hello swift!"

 

 

여러줄을 표현하고 싶을 경우 큰 따옴표 3개(""")를 써줌

 

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

 

이렇게...

 

 

 

여러줄 문자열을 사용하며 줄바꿈을 하고 싶으면 백슬래쉬(\)를 사용한다.

 

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

 

결과

 

 

 

문자열의 시작과 끝에 각각 빈줄을 넣고 싶다면 한 줄을 띄어서 문자열을 입력하면 된다.

 

let lineBreaks = """

This string starts with a line break.
It also ends with a line break.

"""

 

 

위아래에 띄어쓰기 \n이 들어갔음!

 

 

 

들여쓰기도 가능! 닫는 """의 들여써진 위치에 따라 들여쓰기됨.

 

let lineBreaks = """

    This string starts with a line break.
It also ends with a line break.

"""

//위와 아래는 같은 결과를 보임

let lineBreaks = """

    	This string starts with a line break.
	It also ends with a line break.

	"""
    
//밑에 """보다 글자가 앞에 있으면 오류난다. 위치 잘 맞춰줘야함

 

 

 

들여쓰기됨

 

 

 

 

특수문자 사용 가능! 그리고 다를 것 없이 "를 문자열 안에 넣고싶다면 앞에 \를 넣어주면 됨

 

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

let dollaSign = "\u{24}"            // $, 유니코트 U+0024
let blackHeart = "\u{2665}"         // ♥, 유니코드 U+2665
let sparklingHeart = "\u{1F496}" // 💖,유니코드 U+1F496

 

 

별개 다 있다.

 

 

 

빈 문자열을 만들거나 초기화할 수 있다.

 

// 위아래 같은넘임
var emtpryString = ""
var anotherEmptyString = String()

 

 

 

문자열이 비어있는지 확인하려면 isEmpty를 쓰면 된다.

 

if emptyString.isEmpty {
    print("Nothing to see here")
}
// Prints "Nothing to see here"

 

 

 

더하기(+)를 쓰면 문자열 붙이기 가능! 당연히 자료형이 같아야함

 

var variableString = "Horse"
variableString += " and carriage"
// variableString = Horse and carriage

let constantString = "Highlander"
constantString += " and another Highlander"
// 문자열 상수(let)로 선언돼 있어 에러발생!

 

 

 

 

문자

 

문자의 개별 문자를 for문으로 훑기 가능

 

for character in "Dog!🐶" {
    print(character)
}
// D
// o
// g
// !
// 🐶

 

 

출력이 잘 되네요

 

 

문자(Character) 상수를 선언 가능!

 

let exclamationMark: Character = "!"

 

여기서 Character 형은 문자 하나를 말한다. apple 안되고 a 만 저장 가능

 

 

 

 

문자 배열을 이용해 문자열의 초기화 메소드에 인자로 넣어 문자열을 생성할 수 있다.

 

let catCharacters: [Character] = ["C", "a", "t", "!", "🐱"]
let catString = String(catCharacters)
print(catString)
// Prints "Cat!🐱"

 

 

 

문자열과 문자의 결합

 

(+)로 결합 가능, += 사용 가능, append 사용 가능

 

let string1 = "hello"
let string2 = " there"
var welcome = string1 + string2
// welcome : "hello there"

var instruction = "look over"
instruction += string2
// instruction : "look over there"

let exclamationMark: Character = "!"
welcome.append(exclamationMark)
// welcome : "hello there!"

 

 

 

 

문자열 삽입

 

백슬래쉬 괄호를 이용해 상수, 변수, 리터럴 값을 문자열에 추가 가능

 

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

// message : "3 times 2.5 is 7.5"

 

 

 

 

유니코드

 

유니코드 사용 가능~! 이걸로 유니코드끼리 합치는것도 가능함 예시를 보자

 

  let eAcute: Character = "\u{E9}"  // é
  let combinedEAcute: Character = "\u{65}\u{301}"  // e +  ́ 가 합쳐져서 é이 됨 ㄷㄷ
  
  // eAcute : é, combinedEAcute : é 로 같은 값이 되어버린다. 신기해..

 

 

 

글자 만드는것도 가능함

 

  let precomposed: Character = "\u{D55C}"                        // 한
  let decomposed: Character = "\u{1112}\u{u1161}\u{11AB}"    // ㅎ, ㅏ, ㄴ -> 한
  
  // precomposed : 한, decomposed 한

 

 

 

문자열의 길이 세려면 count 쓰면 됨

 

let a = "Hello Swift!^^"
let a_count = a.count
print(a_count) //하면 14가 나옴

 

 

 

 

문자열 인덱스

 

startIndex, endIndex, index(before:), index(after:), index(_:offsetBy:) 등의 메소드로 인덱스로 접근 가능!

 

swift는 인덱스로 int값을 받지 않는다. 그래서 String.index 사용함

 

let greeting = "Guten Tag!"
greeting[greeting.startIndex]
// G

greeting[greeting.index(before: greeting.endIndex)]
// ! 여기서 endIndex는 !가 아니라 \0을 가리킨다. 그래서 endIndex 앞에꺼라 ! 임

greeting[greeting.index(after: greeting.startIndex)]
// u startIndex에서 after니까 2번째 인덱스를 의미함

let index = greeting.index(greeting.startIndex, offsetBy: 7)
greeting[index]
// a offsetBy를 사용해 int형으로 인덱스를 고를수도 있음

 

 

 

 

문자열의 개별 문자를 접근하기 위해서는 indices 프로퍼티를 사용함

 

indices를 사용하면 인덱스를 나타냄.

 

terminator를 사용하면 for문을 돌면서 \n을 하지 않음. 저걸 안넣으면

 

G

u

t

... 이렇게 출력되는데 저걸 넣음으로써 오른쪽에 붙어서 출력됨

 

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) // endIndex 부분에 ! 추가
// hello!

welcome.insert(contentsOf: " there", at: welcome.index(before: welcome.endIndex))
// hello there!
// endIndex 부분 전에 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

 

remove(at: index) 해줘도 됨

 

 

 

 

부분 문자열

 

문자열의 특정 문자 위치! 원래 파이썬에서는 a = 'hello, python' 일 때 a[0] = h 였는데... 스위프트는 이게 안된다!

 

스위프트의 인덱스로 문자열을 표현하기 위해서는 예를 들어

 

let a = "Hello, Swift!"
let first = a[a.startIndex] // H

 

이런식으로 써야한다.

 

 

스위프트에서 제공하는 startIndex를 사용해서 [0]을 표현할 수 있다.

 

 

+ 그리고 여기서 endIndex를 사용하면 !가 아니라 문자열의 마지막인 \0을 가리키므로 오류뜸

 

 

 

 

원하는 인덱스에 있는 글자를 가져오고 싶다면

 

let a = "Hello, Swift!"
let here = a.index(a.startIndex, offsetBy: 2)
let ans = a[here]
// l

 

 

 

문자열을 자르고싶다면!!

 

let a = "Hello, Swift!"
let start = a.index(after: a.startIndex)
let end = a.index(a.endIndex, offsetBy: -2)
let substring = a[start...end]
// ello, Swift

 

 

 

 

 

 

 

 

출처 : https://jusung.gitbook.io/the-swift-language-guide/language-guide/03-strings-and-characters, https://www.boostcourse.org/mo122/lecture/11127?isDesc=false