스위프트 공부를 시작하기로 했다.
열심히 해서 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.
"""
들여쓰기도 가능! 닫는 """의 들여써진 위치에 따라 들여쓰기됨.
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