스위프트의 데이터 타입
앞서 변수 선언 방법
Swift : var value: Int = 100
Java : int value = 100
Kotlin : var value: Integer = 100
......
- Int, UInt
- 8, 16, 32, 64 비트 형태로 나타낼 수 있음
- ex) 32비트 형태는 Int32 로 표현
- 8, 16, 32, 64 비트 형태로 나타낼 수 있음
- Bool
- true/false를 나타내는 데이터 타입
- 내부에 toggle()이라는 API를 통해 값을 반전할 수 있음
- Float / Double
- Float : 32비트
- Double : 64비트
- Character
- String
- hasPrefix : 접두어 확인
- hasSuffix : 접미어 확인
- uppercased : 대문자로 변경
- 등의 다양한 API가 존재함
- 여러 줄의 String 형태를 변수에 담고 싶을 때는
var str: String = """
abcd
efgh
ijkl
"""
처럼 사용할 수 있다.
또한 Swift에는 Any, AnyObject, nil 타입이 존재한다.
- Any
- 모든 데이터 타입을 담을 수 있는 데이터 타입
- AnyObject
- 모든 Class 타입을 담을 수 있는 데이터 타입
- nil
- 알고 있는 null과 같다
데이터 타입 고급
- 타입 확인
- 컴파일 시점에 확인한다.
- 타입이 옳지 않는 코드가 존재하면 컴파일러가 알려준다.
- Application 내에서 오류가 발생하지 않게 방지한다 -> 안전성!!
- 타입이 옳지 않는 코드가 존재하면 컴파일러가 알려준다.
- 컴파일 시점에 확인한다.
- 타입 별칭
- Typealias
- 이후에 나오겠지만, 간략하게 내가 타입을 만드는 것이다.
- ex) 나는 MyInt 라는 Int 타입을 만들고 싶어!
- 이후에 나오겠지만, 간략하게 내가 타입을 만드는 것이다.
- Typealias
typealias MyInt: Int
라고 선언하면 MyInt라는 데이터 타입을 Int와 같이 사용 가능 하다
- 튜플
- 지정된 Data의 묶음
- 선언 : var person: (String, Int, Double) = ("tree", 84, 183.0) 로 선언이 가능하다
- 하지만 위 방식대로 선언시 String, Int, Double이 의미하는 것이 뭔지 알 수가 없다.
- 선언-2 : var person: (name: String, weight: Int, height: Double) 로 선언도 가능하다
컬렉션
- 배열(Array)
- C언어의 배열처럼 Buffer
- 크기가 자동조절된다.
- 별도의 Stack, Queue가 존재하지 않아 Array를 사용하여 구현이 가능
- 선언 : var names: [String] = ["tree", "randy"]
- 선언-2 : var names: Array<String> = ["tree", "randy"]
- first, last, append(), insert(), remove() 등 다양한 API를 통해 조작할 수 있다.
- 딕셔너리(Dictionary)
- 키, 값 으로 이뤄진 자료구조
- 키는 중복이 불가능하다.
- 다른 언어들의 Map과 유사하다
- 선언: var dic: [String, Int] = ["weight": 84]
- 세트(Set)
- 순서없이 저장된다
- 값 중복 불가
- 해시 가능한 값을 ItemType으로 가질 수 있음
- 선언 : var set: Set<Int> = [84]
- 다른 언어들의 Set와 유사하다
- 열거형(Enum)
- 제한된 선택지를 줄 때 사용 가능
- 정해진 값 외에는 입력받고 싶지 않을 때 주로 사용
- 예상된 입력값들이 한정되어 있을 때 사용
- 항목별로 값(rawValue)을 가질 수도 있다
- 연관값(AssociatedValue)를 가질 수 있음
- 주로 switch 블럭과 사용한다.
- + Optional 또한 enum타입이다.
enum Optional<Wrapped> {
case none // nil
case some(Wrapped) // optional value
}
기본 열거형
enum School{
case elementary
case middle
case high
case university
}
var mySchool: School = School.middle
var yourSchool: School = .high
원시값(rawValue)
enum School: String{
case elementary = "초등"
case middle = "중등"
case high = "고등"
case university = "대"
}
var mySchool = .middle
print("\(mySchool.rawValue)") // "중등"
연관값
enum MainDish{
case pasta(taste: String)
case pizza(taste: String, dough: String)
case rice
}
var dinner: MainDish = MainDish.pasta(taste: "로제")
dinner = .pizza(taste: "너무 맛나", dough: "쌀가루")
열거형 - 항목 순회
- 모든 case를 알아야할 때 사용
- ex) for문을 돌 때도 사용 가능
- B.U.T. 연관값을 갖는 다면 사용 불가
enum School: CaseIterable{
//CaseIterable 프로토콜을 채택
case elementary
case middle
//....
}
let allCases: [School] = School.allCases
순환 열거형
- 열거형 항목의 연관 값이 열거형 자신의 값이고자 할 때 사용
- indirect 키워드를 사용
흐름 제어
조건문
- if
- 항상 true/false만 가능하다 -> 다른 언어에서의 0, 1, -1 등의 값을 넣을 수 없다
- else 생략 가능
- switch
- break는 선택 사항
- 이어서 실행하려면 fallthrough를 사용하면 된다
- case가 0부터 5까지 있을 때, 다른 언어에서는 0 수행 블럭 끝에 break를 적지 않으면 1이 수행되었다
- Swift는 반대라고 생각하면 된다. 적지 않아도 자동으로 break 동작을 한다
- B.U.T. case 0을 수행하고 1을 수행하고 싶다면 0 블럭 끝에 fallthrough를 적어주면 된다.
- default: 도 존재한다
- switch에서 다양한 Swift 패턴들을 사용할 수 있다
// 1번째 예제
switch tuple{
case ("tree", 183):
print(...)
case (_, 183): // 와일드카드 패턴
print(...)
case ("tree", let height): //값 바인딩 패턴
print(height) // height 사용 가능
}
// 2번째 예제
let 직급 = "사원"
let 연차 = 1
let 인턴 = false
switch 직급{
case "사원" where 인턴 == true: //where는 뒤쪽에서 포스팅 하겠다
// 직급이 사원이며, 인턴을 했다면
// ....
case "사원" where 연차 < 2 && 인턴 == false:
// ....
}
반복문
- for-in
for i in 0...10{
print(i)
}
for char in str{
print(char)
}
for(i in 0..10){
println(i)
}
for(char in str){
println(char)
}
위는 스위프트 아래는 코틀린 문법이다. 같은 동작을 한다
- while
- Boolean 타입을 사용해야 한다
- repeat-while
- 다른 언어에서의 do-while 문과 같다
'Swift' 카테고리의 다른 글
[Swift] 구조체/클래스 - 스위프트 언어 및 문법(5) - feat.야곰's Swift Programming (0) | 2021.01.14 |
---|---|
[Swift] 옵셔널 - 스위프트 언어 및 문법(4) - feat.야곰's Swift Programming (0) | 2021.01.14 |
[Swift] 함수/메서드 - 스위프트 언어 및 문법(3) - feat.야곰's Swift Programming (0) | 2021.01.14 |
[Swift] 스위프트란? - 스위프트 언어 및 문법(1) - feat.야곰's Swift Programming (0) | 2021.01.14 |
[Swift] autoreleasepool 이란? (2) | 2021.01.14 |