개발/Swift

[Swift] Array, Set, Tuple, Dictionary

도리 🐟 2021. 4. 9. 00:40

μž‘μ„±μΌ: 2020.09.06


Array

  • λ°°μ—΄ νƒ€μž…
  • 데이터λ₯Ό μˆœμ„œλŒ€λ‘œ μ €μž₯ν•˜κ³ , 쀑볡을 ν—ˆμš©ν•œλ‹€.

μ„ μ–Έ 방법

let john = "John Lennon"
let paul = "Paul McCartney"
let george = "George Harrison"
let ringo = "Ringo Starr"

let beatles = [john, paul, george, ringo]

νƒ€μž… λͺ…μ‹œλŠ”[Int],[String]처럼 ν•œλ‹€

let numbers: [Int] = [0, 1, 2]

Set

  • 데이터 μ €μž₯ μˆœμ„œκ°€ μ—†κ³ , 쀑볡이 ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€.
  • λ‹¨μˆœν•œ exist 확인이라면Set을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŒ(빠름!)

μ„ μ–Έ 방법

let colors = Set(["red", "green", "blue"])

νƒ€μž… λͺ…μ‹œ

let numbers: Set = Set([0, 1, 2])
//or
let numbers: Set<Int> = Set([0, 1, 2])

Tuple

  1. Tuple에 μ•„μ΄ν…œμ„ μΆ”κ°€ν•˜κ±°λ‚˜ μ‚­μ œν•  수 μ—†μŒ (κ³ μ •λœ 크기λ₯Ό 가짐)
  2. Tuple의 μ•„μ΄ν…œ νƒ€μž…μ„ λ³€κ²½ν•  수 μ—†μŒ (μƒμ„±ν•˜κ³ λ‚˜λ©΄ 항상 λ™μΌν•œ νƒ€μž… μœ μ§€)
  3. Tuple의 μ•„μ΄ν…œμ— μ ‘κ·Όν•  λ•ŒλŠ” index, μ•„μ΄ν…œ 이름 λͺ¨λ‘ κ°€λŠ₯ (μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” indexλ‚˜ 이름 접근은 λΆˆκ°€λŠ₯)

μ„ μ–Έ 방법

var name = (first: "Taylor", last: "Swift")

μ ‘κ·Ό 방법

name.0
//or
name.first

Arrays vs sets vs tuples

  • Tuple: 각 μ•„μ΄ν…œμ΄ κ³ μ •λœ ν¬μ§€μ…˜ λ˜λŠ” 이름을 κ°€μ Έμ•Ό ν•  λ•Œ
let address = (house: 555, street: "Taylor Swift Avenue", city: "Nashville")

 

  • Set: 쀑볡이 ν—ˆμš©λ˜μ§€ μ•Šμ•„μ•Ό ν•˜κ³ , νŠΉμ • μ•„μ΄ν…œμ΄ ν¬ν•¨λ˜λŠ”μ§€ λΉ λ₯Έ 확인이 ν•„μš”ν•  λ•Œ
let set = Set(["aardvark", "astronaut", "azalea"])

 

  • Array: 쀑볡이 ν—ˆμš©λ˜κ³ , μ•„μ΄ν…œμ˜ μˆœμ„œκ°€ μ£Όμš” λͺ©μ μΌ λ•Œ (μ…‹ 쀑 κ°€μž₯ ν”νžˆ μ‚¬μš©λ˜λŠ” νƒ€μž…)
let pythons = ["Eric", "Graham", "John", "Michael", "Terry", "Terry"]

Dictionaries

  • integer position 뿐만 μ•„λ‹ˆλΌ λ‹€λ₯Έ 데이터 νƒ€μž…μœΌλ‘œ 접근이 κ°€λŠ₯
let heights = [
    "Taylor Swift": 1.78,
    "Ed Sheeran": 1.73
]

 

: 의 μ™Όμͺ½μ΄ ν‚€, 였λ₯Έμͺ½μ΄ κ°’


값을 읽을 λ•Œ [ ] 이용

heights["Taylor Swift"]

 

Note: νƒ€μž… μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•  λ•ŒλŠ” [String: Double] , [String: String] 처럼 μ •μ˜

Dictionary default values

μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” key에 μ ‘κ·Όν•˜λŠ” 경우 nil을 λ°˜ν™˜

let favoriteIceCream = [
    "Paul": "Chocolate",
    "Sophie": "Vanilla"
]

favoriteIceCream["Paul"] // == "Chocolate"

favoriteIceCream["Charlotte"] // == nil

 

default valueλ₯Ό μ •μ˜ν•  μˆ˜λ„ 있음

favoriteIceCream["Charlotte", default: "Unknown"] // == Unknown

Creating empty collections

Array, Set, Dictionary λͺ¨λ‘ 값을 ν•œ 곳에 μ €μž₯ν•œλ‹€λŠ” 의미둜 collection이라고 뢀름

empty collection 생성 방법

var teams = [String: String]() //empty dictionary

var results = [Int]() //empty array

 

Empty Set 생성 문법은 쑰금 닀름

var words = Set<String>()
var numbers = Set<Int>()

 

Array, Dictionary도 같은 λ¬Έλ²•μœΌλ‘œ 생성 κ°€λŠ₯

var scores = Dictionary<String, Int>()
var results = Array<Int>()

Enumerations

enum Result {
    case success
    case failure
}

let result4 = Result.failure

 

각 caseλ§ˆλ‹€ κ΄€λ ¨λœ 값을 μΆ”κ°€λ‘œ μ €μž₯ν•  수 있음

enum Activity {
    case bored
    case running(destination: String)
    case talking(topic: String)
    case singing(volume: Int)
}

let talking = Activity.talking(topic: "football")

Enum Raw Value

Enum이 κ°–λŠ” λ°μ΄ν„°μ˜ νƒ€μž… 지정할 수 있고, κ·Έ κ°’μœΌλ‘œ Enum의 caseλ₯Ό μ–»μ–΄μ˜¬ 수 있음

Int인 경우 SwiftλŠ” μžλ™μœΌλ‘œ 0λΆ€ν„° 번호λ₯Ό 맀김

enum Planet: Int {
    case mercury
    case venus
    case earth
    case mars
}

let earth = Planet(rawValue: 2) //return Planet.earth

 

λ˜λŠ” νŠΉμ • μˆ«μžλΆ€ν„° μ‹œμž‘ν•˜λ„λ‘ 지정 κ°€λŠ₯

enum Planet: Int {
    case mercury = 1
    case venus
    case earth
    case mars
}

 

λ‹€λ₯Έ νƒ€μž… μ˜ˆμ‹œ

enum Planet: String {
    case mercury
    case venus
    case earth = "test"
    case mars
}

let earth = Planet(rawValue: "test")