2일차 - 21.06.09

수킴·2021년 6월 9일
0

100DaysOfSwift

목록 보기
3/37
post-thumbnail

학습키워드

  • arrays
  • dictionaries
  • sets
  • enums

1. Arrays

배열은 단일 값으로 저장되는 값의 모음입니다.

배열을 사용하기 위해서는 [] 괄호를 사용합니다.

각 값들은 , 로 구분합니다.

let array: [Any] = [1, "error", 2]

❌ 존재하지 않는 항목을 읽으면 스위프트는 crash가 발생합니다.

배열의 각 항목의 위치는 0부터 시작합니다.

배열이 필요한 이유?

많은 값들을 저장하기 원할 때 편리하게 사용할 수 있습니다. 다른 타입처럼 상수와 변수를 만들 수 있습니다.

스위프트의 배열은 원하는 만큼 크기를 줄이고 늘릴 수 있습니다. (가변적이다.)

2. Sets

세트의 사용방법

Set 키워드를 사용한 후 () 괄호 안에 배열 값을 저장

세트는 배열과 두가지 차이점을 빼고는 동작하는 방식이 같습니다.

  • 두 가지 차이점
    1. 항목들은 순서대로 저장되지 않고 랜덤으로 순서를 저장합니다.
    2. 세트에서는 항목이 중복될 수 없고 유일한 값을 가져야 합니다.
let colors: Set<String> = Set(["red", "green", "blue", "red", "blue"])

// console
// ["blue", "green", "red"]

만약 중복된 값을 저장한다면 중복된 항목은 제외하고 저장됩니다. (crash발생하지 않는다.)

또한 세트는 배열에서와 같이 항목의 위치를 사용하여 값을 읽을 수 없습니다.

💡 세트는 실제로는 랜덤으로 순서가 지정된 게 아니고 처음부터 순서가 지정되지 않은 것

세트를 언제 필요할 까?

세트는 추가 한 순서대로 객체를 저장할 필요가 없기 때문에 빠른 검색을 위해 최적화하는 무작위 순서로 객체를 저장할 수 있습니다.

예를 들어, 세트에 항목이 포함되어있는지 확인할 때 찾는 속도가 빠릅니다.

반면에 배열은 순서대로 항목을 저장하기 때문에 지정한 순서대로 항목을 저장한 후 첫번째부터 확인을 하기 때문에 속도가 느립니다.

→ 즉, 중복된 단어가 없고 빠른 조회를 원할 때 사용하면 유용하다.

3. Tuples

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

name.first
name.0

name.first = "hello"
name.first
print(name)
  1. 튜플에서 항목을 새로 추가하거나 제거할 수 없습니다. (크기가 고정되어 있습니다.)
  2. 튜플의 항목 타입은 변경할 수 없습니다. (값은 변경 가능) , 유일한 값이 아니여도 상관 없다.
  3. 항목의 위치를 사용하거나 naming을 사용하거 값을 접근할 수 있지만 존재하지 않는 위치나 naming은 접근할 수 없습니다.

튜플과 배열의 차이점

튜플은 변경할 수 없는 고정된 집합인 반면, 배열은 추가 삭제가 자유롭습니다.

튜플은 naming을 사용하여 읽을 수 있기 때문에 더 구체적입니다.

또 다른 장점은 여러가지 타입을 단일 값으로 결합할 수 있습니다.

var person = (name: "Paul", age: 40, isMarried: true)

4. Arrays vs sets vs tuples

  • 각 항목에 정확한 위치 또는 이름이있는 특정,고정 된 관련 값들의 집합이 필요한 경우 튜플을 사용합니다.
  • 중복되지 않는 값들의 집합이 필요하거나 특정 항목을 빠르게 검색하기 위해서는 세트를 사용합니다.
  • 중복되는 값들의 집합이나 항목의 순서가 중요한 경우 배열을 사용합니다.

5. Dictionaries

딕셔너리는 배열과 같은 값의 집합이지만 key-value를 사용하여 값을 저장합니다.

딕셔너리의 사용방법은 [] 를 사용하고 각 항목은 , 로 구분됩니다.

let heights: [String: Double] = [
    "Taylor Swift": 1.78,
    "Ed Sheeran": 1.73
]

heights["Ed Sheeran"]

딕셔너리가 있는 이유?

딕셔너리는 추가하려는 항목을 식별할 수 있는 key를 선택할 수 있지만 배열은 각 항목을 순서대로 추가합니다.

key를 사용하기 때문에 값에 접근할 때 편리합니다. 또한 특정 순서로 항목을 저장하지 않으므로 빠른 검색을 할 수 있습니다.

스위프트는 딕셔너리에 key가 없다면 nil을 반환합니다.

6. Dictionary default values

딕셔너리에 없는 key에 접근했을 때 nil을 반환하지 않고 default기본값을 설정할 수 있습니다. 설정하면 default 값이 반환됩니다. 딕셔너리에 존재하는 key에 접근하면 맞는 값이 반환됩니다.

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

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

default 값을 제공하는 이유?

딕셔너리에 없는 key에 접근해서 nil이 반환된다면 코드에 문제가 발생할 수 있고 문제가 발생했을 때 찾는 데 유용할 수 있습니다.

7. Creating empty collections

배열, 세트, 딕셔너리는 컬렉션이라고 합니다.

빈 컬렉션을 만들려면 타입 뒤에 () 를 입력합니다.

// 빈 딕셔너리 생성
var teams = [String: String]()
var scores = Dictionary<String, Int>()

// 항목 추가
teams["Paul"] = "Red"

// 빈 배열 생성
var results = [Int]()
var stringResults: [String] = []
var intResults = Array<Int>()

// 빈 세트 생성
var words = Set<String>()
var numbers = Set<Int>()

빈 컬렉션을 만드는 이유

배열이 생성될 때 모든 항목을 알고 있는 경우도 있을 수 있지만, 데이터를 계산하여 추가하는 경우도 있기 때문에 사용합니다.

8. Enumerations

열거형은 사용하기 쉽게 관련 값들을 그룹으로 정의하는 방법입니다.

사용 방법은 enum 키워드를 사용하고 {} 괄호안에 case 항목들을 정의합니다.

각 항목은 중복되지 않아야 합니다.

let result = "failure"
let result2 = "failed"
let result3 = "fail"

enum Result {
    case success
    case failure
}

let result4 = Result.failure

열거형을 사용하면 주어진 항목내에서 선택하기 때문에 실수를 방지할 수 있습니다.

주어진 항목에 없는 것을 선택하면 에러가 발생합니다.

9. Enum associated values

열거형은 단순히 값을 저장할 뿐만 아니라 각 case 에 연관된 값을 저장할 수 있습니다.

연관된 값을 저장하므로 정보를 추가할 수 있습니다.

일부 case 에만 연관된 값을 저장해도 되고, 모든 case 에 저장하여도 문제가 없습니다.

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

let talking = Activity.talking(topic: "football")
let singing = Activity.singing(volume: 2)

10. Enum raw values

열거형에 직접 값을 할당 할 수 있습니다.

사용방법은 타입을 선언합니다.

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

let earth = Planet(rawValue: 3)

열거형의 원시값(rawValue)에서 숫자를 사용하는 경우 스위프트는 0부터 시작하는 숫자를 자동으로 할당합니다.

위 코드에서 첫번째 case 원시값을 1로 저장한다면 1이후 숫자를 할당합니다.

원시값은 중복되지 않는 값을 가져야 합니다.

링크

100 Days of Swift - Day 2 - Hacking with Swift

profile
iOS 공부 중 🧑🏻‍💻

0개의 댓글