[swift] array, dictionary, set, enum

Snyong·2023년 9월 25일

swift

목록 보기
2/10
post-thumbnail

이전글: https://velog.io/@spencer0124/swift-%EA%B8%B0%EB%B3%B8-var-let

  • array : 여러 데이터를 순서대로 담아 놓은 변수
    순서에서 벗어난 index를 요청하면 크래시 발생
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 : 여러 데이터를 순서 상관없이, 중복없이 담아 놓은 변수
    순서가 없다는 점(랜덤순서), 중복 데이터를 들고 있지 않다는 점이 array와의 차이

    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

0개의 댓글