이전글: https://velog.io/@spencer0124/swift-%EA%B8%B0%EB%B3%B8-var-let
array : 여러 데이터를 순서대로 담아 놓은 변수let yoo = "유재석"
let ji = "지석진"
let ha = "하하"
let so = "전소민"
let song = "송지효"
let kim = "김종국"
let runningMans = [yoo, ji, ha, so, song, kim]
runningMans[0] // -> 유재석
runningMans[1] // -> 지석진
runningMans[5] // -> 김종국
// 비어 있는 배열을 초기화하는 두가지 방법
var emptyArr1: [Int] = []
var emptyArr2 = [Int]()
dictionary : 여러 데이터를 키와 값의 형태로 담아 놓은 변수nil (크래시가 아니라는 점 유의)let languageCode = [
"한국":"ko",
"미국":"en",
"일본":"ja",
]
languageCode["한국"]
languageCode["미국"]
languageCode["베트남"] // nil
// 비어 있는 딕셔너리를 초기화하는 두가지 방법
var emptyDic1: [String: Any] = [:]
var emptyDic2 = [String:Any]()
set : 여러 데이터를 순서 상관없이, 중복없이 담아 놓은 변수var primes: Set = [2, 3, 5, 7] -> set
var primes = [2, 3, 5, 7] -> array
type annotation을 해주지 않으면 array이다
var primes: Set<Int> = [2,3,5,7]
// ()로 감싸서 중복데이터를 입력하면, 중복된것 알아서 무시
var evens = Set<Int>([2,4,6,8,2,4])
// 비어있는 set을 초기화하는 두가지 방법
var emptySet1: Set<Int> = []
var emptySet2 = Set<Int>()
tuple : 여러 데이터를 하나의 값으로 표현var phone = (os:"iOS", model:"iPhone13")
phone.0
phone.os
// 이렇게도 사용하는 경우 phone1.os로는 접근 불가능
var phone1 = ("iOS", "iPhone13")
phone1.0
enum : 서로 관계 있는 값들을 모아서 표현한것enum WeekDay {
case mon
case tue
case wed
case thu
case fri
}
var today: WeekDay = .mon
// WeekDay라고 타입을 명시했기 때문에 .mon 으로 값 할당 가능
enum MediaType {
case audio
case video
}
var mediaType: MediaType = .audio
연관값(associated value)를 가지고 있는 형태로 표현도 가능
enum MediaType {
case audio(String)
case video(String)
}
var mp3: MediaType = .audio("mp3")
var h264: MediaType = .video("h264")
// 💡 이런식으로 응용이 가능하다
switch mp3 {
case .audio(let extensionType):
print("This is an audio file with extension \(extensionType)")
case .video(let extensionType):
print("This is a video file with extension \(extensionType)")
}

enum을 표시할때 value를 할당해서 표시해야할 때도 있다
Int 타입의 경우 0부터 시작
String의 경우 case의 이름을 따름
이름 표기 규칙이 다른 경우 (ex: leftRight vs left_right) 유용하게 사용 가능
enum MasterLevel: Int {
case beginner // 0
case intermediate // 1
case professional // 2
}
let pro = MasterLevel(rawValue: 2)
let otherLevel = MasterLevel(rawValue: 5) // nil
enum Direction: String{
case up // "up"
case down = "ddd" // "ddd"
}
let up = Direction(rawValue: "up")
let down = Direction(rawValue: "ddd")
let otherDirection = Direction(rawValue: "left") // nil