100 Days of Swift - Day 2: Complex Data Types

100 Days of Swift - Day 2: Complex Data Types

100 Days of Swift Day 2 - Complex Data Types(Arrays, Sets, Tuples, Dictionaries and Enumerations)

오늘의 충격적인 사실: Swift는 큰 숫자를 1000 단위로 underscore로 구분해준다! 말도 안돼😋 솔직히 앞부분에선 배울 거 없을 줄 알았는데 반성반성~.~

Arrays

  • single value를 저장하는 collection
  • 주의: 없는 값에 접근하려하면 swift crashes!
  • Type annotations: [String], [Int], [Double], [Bool] … etc.
let john = "John Lennon"
let paul = "Paul McCartney"
let george = "George Harrison"
let ringo = "Ringo Starr"

let beatles = [john, paul, george, ringo] // seperated with comma

// How to access a value
beatles[1]

// This crashes!
beatles[9] // Value that does not exist

Sets

  • Array와 비슷한 Collection. 단 두 가지 차이가 존재한다. 1. Item 사이에 순서가 없음(unorderd) 2. 모든 Item이 unique해야함.
let colours = Set(["red", "green", "blue"]) // {"blue", "green", "red"}
let colours2 =Set(["red", "green", "blue", "blue", "red"]) // {"blue", "green", "red"} : Duplicated items are ignored!

Tuples

  • 한 value 안에 여러 값을 저장할 수 있음.
  • Array와의 차이점은,
    1. item을 더하거나 제거할 수 없음
    2. Tuple 내부 item의 type을 바꿀 수 없음. 생성 당시 그대로여야한다!
    3. numerical position/naming 둘 모두로 읽을 수 있지만 없는 값은 읽을 수 없다!
var name = (first: "Taylor", last: "Swift")
name.0 // by numerical position
name.firt // by naming

// Can change the value inside the tuple after the creation, but types cannot be changed!
name = (first: "Justin", age: 25) // error!

Arrays vs. Sets vs. Tuples

각각은 어느 상황에 쓰여야 할까? 용도를 Araboza

  • Tuple : 구체적이며 고정값이고 서로 연관성 있는 값들의 collection

    let address = (house: 555, street: "Taylor Swift Avenue", city: "Nashville")
    
  • Set: 값이 unique 해야 하거나 빠른 속도로 값의 존재 여부를 확인해야 할 때

    let set = Set(["aardvack", "astronaut", "azalea"])
    
  • Array : 중복된 값이 존재하거나 item의 순서가 중요할 때 (가장 흔한 type)

    let pythons = ["Eric", "Graham", "John", "Michael", "Terry", "Terry"]
    

Dictionaries

  • Array와 유사한 값들의 collection. 차이는 값에 접근할 때 integer position 대신에 원하는 것을 이용해 접근할 수 있다. 주로 이용하는 것은 string!
  • Type annotation에는 [Identifier: Value types]을 사용
let heights = [
    "Taylor Swift": 1.78,
    "Ed Sheeran": 1.73
]

heights["Taylor Swift"]

Dictionary Default Values

  • Dictionary에서 존재하지 않는 Key를 이용해서 값을 불러오면 nil을 돌려준다.
  • 이를 방지하기 위해서 default value를 사용!
let favoriteIceCream = [
    "Paul": "Chocolate",
    "Sophie": "Vanilla"
]

favoriteIceCream["Paul"] // OK!
favoriteIceCream["Charlotte"] // Returns nil

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

Creating empty collections

  • Empty collection(arrays, sets, dictionaries)를 만들기 위해서는 type 뒤에 빈 괄호쌍 () 을 달아주면 된다.
  • 예외: Set
    • Set<String>() 와 같은 방식을 사용해주어야 함.
    • swift가 array와 dictionary를 위한 special syntax를 가지고 있기 때문!
    • 다른 애들은 angle bracket을 이용해야 한다.
var teams = [String: String]() // Dictionary
var results = [Int]() // Array

// Angle bracket way 
var words = Set<String>()
var numbers = Set<Int>()
var scores = Dictionary<String, Int>()
var results = Array<Int>()

Enumerations

  • 관련된 값들을 이용하기 용이하게 묶어논 data type
// 3개의 value가 동일한 목적이지만 다른 값을 가지게 된다!
let result = "failure"
let result2 = "failed"
let result3 = "fail"

// 대신 enum을 사용
enum Result {
    case success
    case failure
}

// 이렇게 하면 실수로 다른 string을 사용하는 것을 막을 수 있음. 
let result4 = Result.failure

Enum Associated Values

  • Enum은 simple value 뿐만 아니라 associated value 역시 가질 수 있음. 이를 이용해서 더 맥락있는(?) 추가 정보를 저장할 수 있게 된다.
enum Activity {
    case bored
    case running(destination: String)
    case talking(topic: String)
    case singing(volume: Int)
} 

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

Enum Raw Values

  • 가끔 enum에 value를 대입해서 의미를 저장해두어야 하는 순간이 있음.
  • 이 때 사용하는 것이 raw value !
  • Swift는 자동으로 raw value를 0부터 대입한다. 이 raw value들을 알맞은 enum instance를 생성하는 데 이용할 수 있음!
// mercury = 0, venus = 1, ... 
enum Planet: Int {
    case mercury
    case venus
    case earth
    case mars
}

let earth = Planet(rawValue: 2)
  • 원한다면 수동으로 하나 이상의 값을 대입해줄 수 있음. 이 경우 swift가 나머지 값을 채워넣는다.
enum Planet: Int {
    case mercury = 1
    case venus // 2
    case earth // 3
    case mars // 4
}

Complex types: Summary

  • Arrays, sets, dictionaries를 이용하면 여러 item을 한 value에 저장할 수 있다. 알맞은 상황에 잘 사용할 것!
  • Array는 numerical position을 통해 item에 접근한다.
  • Set에는 순서가 없으므로 numerical position을 통해 접근할 수 없다.
  • Tuple은 크기가 고정되어 있고, 각 item에 이름을 붙일 수 있다. numerical position/name 둘 모두 이용 가능!
  • Dictionaries는 key에 관해 item을 저장하고 key를 이용해 값에 접근할 수 있음.
  • Enums는 서로 연관된 값을 묶는 방식! Spelling mistake를 없앨 수 있다.
  • Enum에는 raw value를 붙일 수 있다. 혹은 Associate value를 이용해서 각 case에 연관된 값을 첨부하는 것 역시 가능!

강의 주소


© 2021 Subeen Park. All rights reserved.