๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐ŸŽ iOS/Swift

[Swift] ์Šค์œ„ํ”„ํŠธ ๋ฐ์ดํ„ฐ ํƒ€์ž…(Swift data type) - 2. ์ปฌ๋ ‰์…˜ ํƒ€์ž…(๋ฐฐ์—ด(Array), ๋”•์…”๋„ˆ๋ฆฌ(Dictionary), ์ง‘ํ•ฉ(Set))

728x90

1. Swift ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…

   1 - 1. ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž… (Bool, Int, UInt, Float, Double, Character, String)

   1 - 2. Any, AnyObject, nil, Typealias

 

[Swift] ์Šค์œ„ํ”„ํŠธ ๋ฐ์ดํ„ฐ ํƒ€์ž…(Swift data type) - 1.๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…, Any, AnyObject, nil, Typealias

๐Ÿ’ก Swift ๋ฐ์ดํ„ฐ ํƒ€์ž… ํŠน์ง• - ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ์ด๋ฆ„์€ ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ์ž…๋ ฅํ•œ๋‹ค. - ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…(Int, Float, Double, Bool, String, Array, Dictionary, Set ๋“ฑ)์€ ๋ชจ๋‘ Struct (๊ตฌ์กฐ์ฒด)๋ฅผ ๊ธฐ..

lxxyeon.tistory.com

2. ์ปฌ๋ ‰์…˜ ํƒ€์ž… (Array, Dictionary, Set)

 

3. ์—ด๊ฑฐํ˜• ํƒ€์ž… (enum)

 

[Swift] ์Šค์œ„ํ”„ํŠธ ๋ฐ์ดํ„ฐ ํƒ€์ž…(Swift data type) - 3. ์—ด๊ฑฐํ˜• ํƒ€์ž… (enum)

1. Swift ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…  1 - 1. ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž… (Bool, Int, UInt, Float, Double, Character, String)  1 - 2. Any, AnyObject, nil, Typealias >>https://lxxyeon.tistory.com/23 [Swift] ์Šค์œ„ํ”„ํŠธ..

lxxyeon.tistory.com


2. ์ปฌ๋ ‰์…˜ ํƒ€์ž…

๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด, ์„œ๋กœ ์—ฐ๊ด€๋œ ๊ฐ’๋“ค์„ ์ปฌ๋ ‰์…˜(Colllection)์œผ๋กœ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ผ์ด ๋งŽ๋‹ค.

Swift์—์„œ ์ œ๊ณตํ•˜๋Š” ์ปฌ๋ ‰์…˜ ํƒ€์ž…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž!

 

[Contents]

  • ๋ฐฐ์—ด(Array)
  • ๋”•์…”๋„ˆ๋ฆฌ(Dictionary)
  • ์ง‘ํ•ฉ(Set)

๐ŸŽ Array

  • Array๋Š” ๋ฉค๋ฒ„๊ฐ€ ์ˆœ์„œ(์ธ๋ฑ์Šค)๋ฅผ ๊ฐ€์ง„ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ์˜ ์ปฌ๋ ‰์…˜ ํƒ€์ž…
  • ํ•„์š”์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ๋ฒ„ํผ์˜ ํฌ๊ธฐ ์กฐ์ ˆ ๊ฐ€๋Šฅํ•˜์—ฌ ์š”์†Œ์˜ ์‚ฝ์ž… ๋ฐ ์‚ญ์ œ๊ฐ€ ์ž์œ ๋กญ๋‹ค.
  • ์ค‘๋ณต ๊ฐ€๋Šฅ

๐Ÿ’ก ๋ฐฐ์—ด ์ดˆ๊ธฐํ™” 1. ๋ฐฐ์—ด ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ 

// ๋นˆ Int Array ์ƒ์„ฑ
var ๋ฐฐ์—ด์ด๋ฆ„: Array<ํƒ€์ž…> = Array<ํƒ€์ž…>() // ๊ธฐ๋ณธ
var integers: Array<Int> = Array<Int>() 

// ๊ฐ™์€ ํ‘œํ˜„
var integers: Array<Int> = [Int]()     
var integers: Array<Int> = []
var integers: [Int] = Array<Int>()
var integers: [Int] = [Int]()
var integers: [Int] = []
var integers = [Int]()

์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์งค๋•Œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋‹จ์ถ• ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€๊ด„ํ˜ธ ์‚ฌ์ด์— ๋ฐฐ์—ด์˜ ํƒ€์ž…๋งŒ ๋„ฃ์–ด์ฃผ๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ๋! ๐Ÿ˜Š

let arr1: [Int]
var arr2: [String]

๐Ÿ’ก ๋ฐฐ์—ด ์ดˆ๊ธฐํ™” 2. init(repeating:count:) ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉํ•ด์„œ ์ดˆ๊ธฐํ™” ํ•˜๊ธฐ

๋ฐ˜๋ณตํ•  ๋ฐ์ดํ„ฐ์™€ ํšŸ์ˆ˜๋ฅผ ์ง€์ •ํ•ด ์ฃผ๋ฉด, ๋ฐฐ์—ด์— ์„ค์ •์— ๋งž์ถ”์–ด ์ƒ์„ฑ๋œ๋‹ค.

let arrayRepeating1 = Array(repeating: 1, count: 5)
//[1, 1, 1, 1, 1]
let arrayRepeating2 = Array(repeating: "A", count: 5)
//["A", "A", "A", "A", "A"]

 

๐Ÿ’ก ๋ฐฐ์—ด ์ดˆ๊ธฐํ™” 3. ์ž„์˜์˜ ๊ฐ’์„ ๋„ฃ์–ด์„œ ์ดˆ๊ธฐํ™” ํ•˜๊ธฐ

let arr = Array(1...10)
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

 

๐Ÿ’ก ํ˜•์‹ ์ถ”๋ก 

๋ฐฐ์—ด์˜ ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ Xcode์˜ ์ปดํŒŒ์ผ๋Ÿฌ(Apple LLVM/Clang)๊ฐ€ ์•Œ์•„์„œ ๊ฒฐ์ •ํ•ด์ค€๋‹ค.

๋‹จ, ๋นˆ ๋ฐฐ์—ด์ธ ๊ฒฝ์šฐ ํƒ€์ž…์„ ๊ผญ ๋ช…์‹œ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

// ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํƒ€์ž…์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ์•Œ์•„์„œ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.
var arr2 = [1,2,3,4]

// Error: ๋นˆ ๋ฐฐ์—ด ์„ ์–ธ์‹œ ํƒ€์ž… ๋ช…์‹œ ํ•„์ˆ˜!!
var arr1 = []

๐Ÿ’ก Any ํƒ€์ž… ๋ฐฐ์—ด ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”

๋ฐฐ์—ด์— ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’๋“ค์„ ๋„ฃ๊ณ  ์‹ถ์„๋•Œ๋Š” Any ํƒ€์ž… ๋ช…์‹œ!!

var integers: Any = [1, "2", 1.0]
// Error! - ๋‹ค๋ฅธ ํƒ€์ž…์˜ ๊ฐ’๋“ค์„ ๋„ฃ์„ ๋•Œ๋Š” Any ํƒ€์ž… ๋ช…์‹œ ํ•„์ˆ˜!!
let arr = [1, "์ด", 3, "์‚ฌ"]

๐Ÿ’ก ๋ฐฐ์—ด ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์†Œ๋“œ

  • ๋ฐฐ์—ด์— ์š”์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ
    • append(_:) : ๋์— ๋ฐฐ์—ด ์š”์†Œ ์ถ”๊ฐ€
    • insert (_:at:) : ์›ํ•˜๋Š” ์ธ๋ฑ์Šค์— ๋ฐฐ์—ด ์š”์†Œ ์ถ”๊ฐ€, at: ์ถ”๊ฐ€ํ•  ์œ„์น˜์˜ ์ธ๋ฑ์Šค
    • contentsOf : ๊ฐ’ ์—ฌ๋Ÿฌ๊ฐœ ์ถ”๊ฐ€ > ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ์ถ”๊ฐ€๋จ
    • += ์—ฐ์‚ฐ์ž๋กœ๋„ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
  • remove(at:) : ๋ฐฐ์—ด ์š”์†Œ ์‚ญ์ œ ํ•˜๊ธฐ
  • isEmpty : ๋นˆ ๋ฐฐ์—ด ํ™•์ธ(true or false)
    • โญ๏ธ Swift ์—์„œ๋Š” ๋นˆ ๋ฐฐ์—ด์ธ์ง€ ํ™•์ธ ํ•  ๋•Œ, array.count == 0 ์ด ๊ตฌ๋ฌธ๋ณด๋‹จ, array.isEmpty๋ฅผ ์‚ฌ์šฉ
  • count : ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์˜ ๊ฐœ์ˆ˜ ๊ฒ€์‚ฌ
var nums = [1,2,3]
var emptyArray: [Int] = []

// .count : ๋ฐฐ์—ด์— ๋“ค์–ด์žˆ๋Š” ๊ฐ’์˜ ๊ฐœ์ˆ˜ ๊ฒ€์‚ฌ 
print(nums.count) //3

// .append : ๋์— ๋ฐฐ์—ด ์š”์†Œ ์ถ”๊ฐ€
nums.append(1) // [1, 2, 3, 1]

// .insert : ์›ํ•˜๋Š” ์ธ๋ฑ์Šค์— ๋ฐฐ์—ด ์š”์†Œ ์ถ”๊ฐ€
nums.insert(10, at: 2) // [1, 2, 10, 3, 1]
// ERROR - ํ• ๋‹น ๋ฒ”์œ„ ์ดˆ๊ณผ : ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ๋‹ค์Œ๊นŒ์ง€๋งŒ ๊ฐ€๋Šฅ
//nums.insert(10, at: 5) 

let newNum = [4, 5, 6]
// += ์—ฐ์‚ฐ์ž ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ
nums += newNum

// .isEmpty : ๋นˆ ๋ฐฐ์—ด ํ™•์ธ
nums.isEmpty // false
emptyArray.isEmpty // true

// .contentsOf : ๊ฐ’ ์—ฌ๋Ÿฌ๊ฐœ ์ถ”๊ฐ€ > ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ์ถ”๊ฐ€๋จ
nums.append(contentsOf: [2, 3]) //[1, 2, 10, 3, 1, 2, 3]
nums.append(contentsOf: 4...6) //[1, 2, 10, 3, 1, 2, 3, 4, 5, 6]
nums.insert(contentsOf: [20, 30], at: 2) //[1, 2, 20, 30, 10, 3, 1, 2, 3, 4, 5, 6]

// contains : ๋ฉค๋ฒ„ ํฌํ•จ ์—ฌ๋ถ€ ํ™•์ธ 
print(nums.contains(100)) //"false\n"
print(nums.contains(99)) //"false\n"

// remove : ๋ฉค๋ฒ„ ์‚ญ์ œ 
nums.remove(at: 0) //0๋ฒˆ ์ธ๋ฑ์Šค๊ฐ’ ์‚ญ์ œ
nums.removeLast() //๋งˆ์ง€๋ง‰์‚ญ์ œ
//nums.removeAll() //๋ชจ๋‘ ์‚ญ์ œ

//firstindex : ๊ฐ’์˜ ์œ„์น˜ ์ฐพ๊ธฐ, swift4.2 ๋ถ€ํ„ฐ Index deprecated
//func firstIndex(of element: Element) -> Int? (Optional ํƒ€์ž…!!!)
print(nums.firstIndex(of: 10)!)

//์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ์„ ์ด์šฉํ•ด์„œ ์ถ”์ถœํ•˜๊ธฐ
if let location = nums.firstIndex(of: 3){
//    print(nums.firstIndex(of: 100))
    print("์œ„์น˜ : \(location)") //์œ„์น˜ :4
}else{
    print("ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค")
}
  • sort ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌํ•˜๊ธฐ
    • ์˜ค๋ฆ„์ฐจ์ˆœ : <
    • ๋‚ด๋ฆผ์ฐจ์ˆœ : >
var array = [1, 10, 30 , 12, 11]

//์˜ค๋ฆ„์ฐจ์ˆœ
array.sort(by: <) //[1, 10, 11, 12, 30]

//๋‚ด๋ฆผ์ฐจ์ˆœ
array.sort(by: >) //[30, 12, 11, 10, 1]

 

๐Ÿ’ก ๋ฐฐ์—ด์˜ ์š”์†Œ ์ ‘๊ทผ ๊ด€๋ จ ๋ฉ”์†Œ๋“œ

  1. Subscript๋กœ ์ ‘๊ทผํ•˜๊ธฐ
  2. ๋Œ€๊ด„ํ˜ธ ์—ฐ์‚ฐ์ž ์‚ฌ์šฉํ•œ ๋ฒ”์œ„๋กœ ์ ‘๊ทผํ•˜๊ธฐ
  3. ์†์„ฑ์œผ๋กœ ์ ‘๊ทผํ•˜๊ธฐ
// 1. Subscript๋กœ ์ ‘๊ทผํ•˜๊ธฐ
array1[0]        // 1
array1[1]        // 2
 
// 2. ๋ฒ”์œ„๋กœ ์ ‘๊ทผํ•˜๊ธฐ
array1[0...1]    // [1, 2]
 
// 3. ์†์„ฑ์œผ๋กœ ์ ‘๊ทผํ•˜๊ธฐ
array1.first     // Optional(1)
array1.last      // Optional(3)

๐Ÿ’ก ๋ฐฐ์—ด ๊ฒ€์ƒ‰ํ•˜๊ธฐ 

var array1 = [1, 2, 3, 4, 5, 6, 7, 8, 9]

// 1. contains : ํ•ด๋‹น ๊ฐ’์ด ๋ฐฐ์—ด์— ์กด์žฌํ•˜๋Š”์ง€ Bool๋กœ ๋ฆฌํ„ด
array1.contains(1)                //true
array1.contains(10)               //false
 
// 1-1. contains + ํด๋กœ์ € : ์ง์ ‘ ๊ฒ€์ƒ‰ ๊ตฌ๋„๋ฅผ ๊ตฌํ˜„ (์˜ˆ์ œ : ์ง์ˆ˜๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด true)
array1.contains { num in          // true
    num % 2 == 0
}
 
// 2. first + ํด๋กœ์ € : ํด๋กœ์ €์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ "๊ฐ’"์„ ๋ฆฌํ„ด, ์—†๋‹ค๋ฉด nil์„ ๋ฆฌํ„ด
array1.first { num in             // Optional(2)
    num % 2 == 0
}
 
// 3. firstIndex + ํด๋กœ์ € : ํด๋กœ์ €์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ "Index"์„ ๋ฆฌํ„ด, ์—†๋‹ค๋ฉด nil์„ ๋ฆฌํ„ด
array1.firstIndex { num in        // Optional(1)
    num % 2 == 0
}
 
// 4. last + ํด๋กœ์ € : ํด๋กœ์ €์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์š”์†Œ์˜ "๊ฐ’"์„ ๋ฆฌํ„ด, ์—†๋‹ค๋ฉด nil์„ ๋ฆฌํ„ด
array1.last { num in              // Optional(6)
    num % 2 == 0
}
 
// 5. lastIndex + ํด๋กœ์ € : ํด๋กœ์ €์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์š”์†Œ์˜ "Index"์„ ๋ฆฌํ„ด, ์—†๋‹ค๋ฉด nil์„ ๋ฆฌํ„ด
array1.lastIndex { num in         // Optional(5)
    num % 2 == 0
}

๐Ÿ’ก ๋ฐฐ์—ด ๋น„๊ต

  • == : ๋ฐฐ์—ด์ด ๊ฐ™์€์ง€ ๋น„๊ตํ•  ๋•Œ ์‚ฌ์šฉ(์ˆœ์„œ๊นŒ์ง€ ๊ฐ™์•„์•ผ true ๋ฆฌํ„ด!)
var colorList = ["red", "orange", "yellow"]

//let์œผ๋กœ ์„ ์–ธํ•œ ๋ฐฐ์—ด์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€!!
let newColor = ["red", "orange", "yellow"]

//๋ฐฐ์—ด ๋น„๊ต(์ˆœ์„œ๋„ ๊ฐ™์•„์•ผ ํ•จ!)
let equelArray = (colorList == newColor) //true

 

์ถ”๊ฐ€๋กœ, ๋ฐฐ์—ด ๋‹ค๋ฃฐ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์„ธ ๊ฐ€์ง€ map, filter, reduce๋Š” ์•„๋ž˜์—์„œ ํ™•์ธ!!

 

[Swift] ๊ณ ์ฐจํ•จ์ˆ˜ - map, filter, reduce

๊ณ ์ฐจํ•จ์ˆ˜? ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•จ์ˆ˜(ํด๋กœ์ €)๋ฅผ ์ธ์ž ๋กœ ๋ฐ›๊ฑฐ๋‚˜, ํ•จ์ˆ˜(ํด๋กœ์ €)๋ฅผ ๋ฐ˜ํ™˜ ํ•˜๋Š” ํ•จ์ˆ˜๋กœ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ ์ž์›์ธก์—์„œ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ

lxxyeon.tistory.com


๐ŸŽ Dictionary

  • ํ‚ค์™€ ๊ฐ’์˜ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ปฌ๋ ‰์…˜ ํƒ€์ž…
  • ๊ฐ’์€ ์ค‘๋ณต์ด ๊ฐ€๋Šฅํ•˜๋‚˜ ํ‚ค๋Š” ์ค‘๋ณต ๋ถˆ๊ฐ€!
  • Dictionary๋Š” ์—ฌ๋Ÿฌ ๋ฆฌํ„ฐ๋Ÿด ๋ฌธ๋ฒ•์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ํ‘œํ˜„ ๋ฐฉ๋ฒ•์ด ๋‹ค์–‘ํ•˜๋‹ค.

๐Ÿ’ก ๋”•์…”๋„ˆ๋ฆฌ ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”

// var anyDictionary: Dictionary<ํ‚คํƒ€์ž…, ๊ฐ’ํƒ€์ž…> = [ํ‚คํƒ€์ž…: ๊ฐ’ํƒ€์ž„]()

// Key๊ฐ€ String ํƒ€์ž…์ด๊ณ  Value๊ฐ€ Any์ธ ๋นˆ Dictionary ์ƒ์„ฑ
var anyDictionary: Dictionary<String, Any> = [String: Any]()
// ๊ฐ™์€ ํ‘œํ˜„
var anyDictionary: Dictionary <String, Any> = Dictionary<String, Any>()
var anyDictionary: Dictionary <String, Any> = [:]
var anyDictionary: [String: Any] = Dictionary<String, Any>()
var anyDictionary: [String: Any] = [String: Any]()
var anyDictionary: [String: Any] = [:]
var anyDictionary = [String: Any]()

๐Ÿ’ก ๋”•์…”๋„ˆ๋ฆฌ ๊ฐ’ ํ• ๋‹น, ์ ‘๊ทผํ•˜๊ธฐ

  • ๋”•์…”๋„ˆ๋ฆฌ์˜ ๊ฒฝ์šฐ, Subscript([])๋กœ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋ฉด ๊ธฐ๋ณธ ๋ฐ˜ํ™˜๊ฐ’์ด Optional ํƒ€์ž…!
  • ํ‚ค๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ ์—๋Ÿฌ ์•ˆ๋‚˜๊ณ  nil ๋ฐ˜ํ™˜!
// ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’ ํ• ๋‹น
anyDictionary = ["key1": 1000]
anyDictionary["key2"] = "value"
anyDictionary["key3"] = 100
print(anyDictionary)

// ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’ ๋ณ€๊ฒฝ
anyDictionary["someKey"] = "dictionary"
print(anyDictionary)

// ๋‚ด๋ถ€ ๊ฐ’ ์ ‘๊ทผ
print(anyDictionary["key1"]) //Optional(1000)
// ๋‚ด๋ถ€์— ์—†๋Š” ํ‚ค๋กœ ์ ‘๊ทผํ–ˆ์„ ๊ฒฝ์šฐ > ์˜ค๋ฅ˜๋ฐœ์ƒ ์—†์ด nil ๋ฐ˜ํ™˜
print(anyDictionary["key4"]) //nil
// ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ default ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก
print(anyDictionary["key4", default : 0]) //0

๐Ÿ’ก ๋”•์…”๋„ˆ๋ฆฌ ๊ฐ’ ์ˆ˜์ •ํ•˜๊ธฐ

  • updateValue(_:forKey:) ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ
    • ํ•ด๋‹น ํ‚ค๊ฐ€ ์—†์„์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์˜ต์…”๋„์„ ๋ฆฌํ„ดํ•œ๋‹ค.
    • ๋”ฐ๋ผ์„œ, ํ•ด๋‹น ํ‚ค์˜ ์ด์ „ ๊ฐ’์— ์—‘์„ธ์Šคํ•  ๋•Œ๋Š” ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
var anyDictionary = ["key1": 1000]
let oldValue = anyDictionary.updateValue(2000, forKey: "key1")

if let lastValue = oldValue, let currentValue = anyDictionary["key1"]{
    print("lastValue : \(lastValue), currentValue : \(currentValue)")
}

// lastValue : 1000, currentValue : 2000

๐Ÿ’ก ๋”•์…”๋„ˆ๋ฆฌ ๊ฐ’ ์‚ญ์ œํ•˜๊ธฐ

  • removeValue(forKey:) ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ
  • ์ „์ฒด ์‚ญ์ œํ•˜๋ ค๋ฉด, removeAll() ์‚ฌ์šฉ
  • nil ๊ฐ’์„ ์„ค์ •ํ•˜์—ฌ ์ œ๊ฑฐ ๊ฐ€๋Šฅ!
// removeValue : ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’ ์ œ๊ฑฐ
anyDictionary.removeValue(forKey: "key1")
// nil ์„ ์„ค์ •ํ•˜์—ฌ ์ œ๊ฑฐ
anyDictionary["key2"] = nil

// removeAll() : ์ „์ฒด ์‚ญ์ œํ•˜๊ธฐ
anyDictionary.removeAll()

๐Ÿ’ก Any ํƒ€์ž…์œผ๋กœ ์ƒ์„ฑ ๊ฐ€๋Šฅ

// ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ์ €์žฅํ•˜๋Š” ๋”•์…”๋„ˆ๋ฆฌ ์ƒ์„ฑํ•˜๊ธฐ
var dictAny1: [String: Any] = ["name": "Sodeul", "age": 100]
var dictAny2: NSDictionary = ["name": "Sodeul", "age": 100]

๐Ÿ’ก ๋”•์…”๋„ˆ๋ฆฌ ๊ด€๋ จ ๋ฉ”์†Œ๋“œ

  • .isEmpty : ๋”•์…”๋„ˆ๋ฆฌ๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ(true or false)
//isEmpty : ๋”•์…”๋„ˆ๋ฆฌ๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ
print(anyDictionary.isEmpty)

๐Ÿ’ก ๋”•์…”๋„ˆ๋ฆฌ์— ๋ฃจํ”„ ์ ์šฉํ•˜๊ธฐ

  • Swift๋Š” ๋”•์…”๋„ˆ๋ฆฌ์˜ ํ‚ค-๊ฐ’ ์Œ์„ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฌผ๋ก , ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’๋งŒ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
let dict: [String : String] = ["A" : "Apple", "B" : "Banana", "C" : "Cherry"]
for (key, value) in dict {
    print("key : \(key), value : \(value)")
}

for key in dict.keys {
    print(key)          // C B A
}
  • ๋”•์…”๋„ˆ๋ฆฌ๋Š” ์ˆœ์„œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— key๋‚˜ value ๊ฐ’๋“ค์„ for๋ฌธ์œผ๋กœ ์ถœ๋ ฅํ•˜๋ฉด ์ถœ๋ ฅ๋˜๋Š” ์ˆœ์„œ๊ฐ€ ๊ณ„์† ๋ฐ”๋€๋‹ค;;
  • ํŠน์ • ์ˆœ์„œ๋กœ ๊ฐ’์„ ๋ฐ˜๋ณตํ•˜๋ ค๋ฉด sort() ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
let dict: [String : String] = ["A" : "Apple", "B" : "Banana", "C" : "Cherry"]

//swift dictionary ๋Š” ์ •์˜๋œ ์ˆœ์„œ๊ฐ€ ์—†์Œ!!
//ํŠน์ • ์ˆœ์„œ๋กœ ๊ฐ’์„ ๋ฐ˜๋ณตํ•˜๋ ค๋ฉด sort() ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ํ•„์š”
for key in dict.keys {
    print(key)          
}
// BCA ์˜€๋‹ค๊ฐ€ ABC ์˜€๋‹ค๊ฐ€... ์ถœ๋ ฅ๊ฐ’์ด ๊ณ„์† ๋ฐ”๋€œ

//sort ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค๋ฆ„์ฐจ์ˆœ ์ถœ๋ ฅ
for value in dict.keys.sorted() {
    print(value)        // A B C
}

๐Ÿ’ก ๋”•์…”๋„ˆ๋ฆฌ to Array

  • ์•„๋ž˜ ์ฝ”๋“œ๋กœ ๋”•์…”๋„ˆ๋ฆฌ์˜ ํ‚ค๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ Array ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค!
var dictArray = Array(dict.keys)
print(dictArray)//["A", "B", "C"]

๐ŸŽ Set

  • Set๋Š” ์ˆœ์„œ๊ฐ€ ์—†๊ณ , ๋ฉค๋ฒ„๊ฐ€ ์œ ์ผํ•œ ๊ฒƒ์„ ๋ณด์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜ ํƒ€์ž…์ž…๋‹ˆ๋‹ค. >> ์ˆœ์„œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ค‘๋ณต ๋ถˆ๊ฐ€!
  • ํ•ด์‹œ๋ฅผ ํ†ตํ•ด ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์— ๋น„ํ•ด ๊ฒ€์ƒ‰์†๋„๊ฐ€ ๋น ๋ฅด๊ณ , ์ €์žฅ๋˜๋Š” ์ž๋ฃŒํ˜•์€ Hashable ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•จ.
  • Hashable ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•œ ์ž๋ฃŒํ˜•๋งŒ ์ €์žฅ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ Anyํƒ€์ž…์œผ๋กœ ์ƒ์„ฑ ๋ถˆ๊ฐ€! > NSSet ํƒ€์ž…์œผ๋กœ ์—ฌ๋Ÿฌ ํƒ€์ž… ์ €์žฅ ๊ฐ€๋Šฅ
  • ์ง‘ํ•ฉ ์—ฐ์‚ฐ์— ์œ ์šฉ

๐Ÿ’ก Set ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”

var integerSet: Set<Int> = Set<Int>()
// 1. ํƒ€์ž… Annotation์œผ๋กœ ์ƒ์„ฑํ•˜๊ธฐ
var set1: Set<Int> = []
 
// 2. ์ƒ์„ฑ์ž๋กœ ์ƒ์„ฑํ•˜๊ธฐ
var set2 = Set<Int>()

//<์ฃผ์˜> ํƒ€์ž…์ถ”๋ก ์œผ๋กœ ์ƒ์„ฑ์‹œ์—๋Š” ๋ฐฐ์—ด๋กœ ์ธ์‹!!
var set = [1, 5, 3, 2, 1]   // ๋ฐฐ์—ด๋กœ ์ธ์‹๋จ

๐Ÿ’ก NSSetํƒ€์ž…์œผ๋กœ ์ƒ์„ฑํ•˜์—ฌ ์—ฌ๋Ÿฌ ํƒ€์ž… ์ €์žฅํ•˜๊ธฐ

var set: NSSet = [1, "s", 1.2] //{"s", 1, 1.2}

๐Ÿ’ก Set ๋ฉ”์†Œ๋“œ

  • .isEmpty : set์ด ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ(true or false)
  • .count 
  • contains(_:) : ํŠน์ • ํ•ญ๋ชฉ์ด ์ธ์Šคํ„ด์Šค์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • insert(_:) ๋กœ ์ง‘ํ•ฉ์— ์š”์†Œ ์‚ฝ์ž…ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
  • update
  • remove
  • removeAll
var set1: Set<Int> = [1, 2, 5, 0]
 
let count: Int = set1.count            // Set ๊ฐฏ์ˆ˜ ํ™•์ธ : 4
let isEmpty: Bool = set1.isEmpty

set1.contains(1)                    // true
set1.contains(10)                   // false

// insert : ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ถ”๊ฐ€๋œ ๊ฒฐ๊ณผ๋ฅผ ํŠœํ”Œ๋กœ ๋ฆฌํ„ด (์ค‘๋ณต์ด๋ฉด false, ์ถ”๊ฐ€๋œ ๊ฐ’)
set1.insert(1)                // (false, 1)
set1.insert(10)               // (true, 10)
 
// update : ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ถ”๊ฐ€ ํ›„ nil ๋ฆฌํ„ด, ์กด์žฌํ•  ๊ฒฝ์šฐ ๋ฎ์–ด์“ฐ๊ธฐ ํ›„ ๋ฎ์–ด์“ฐ๊ธฐ ์ „ ๊ฐ’ ๋ฆฌํ„ด
set1.update(with: 1)          // Optioanl(1)
set1.update(with: 120)        // nil

// ์‚ญ์ œ
integerSet.remove(100)
integerSet.removeFirst()

๐Ÿ’ก Set ์ง‘ํ•ฉ ์—ฐ์‚ฐ

  • Union(_:) : ๋‘ ์ง‘ํ•ฉ์„ ํ•ฉ์น˜๋Š” ๋ฉ”์†Œ๋“œ(ํ•ฉ์ง‘ํ•ฉ)
  • intersection(_:) : ๋‘ ์ง‘ํ•ฉ์— ๊ณตํ†ต์œผ๋กœ ์กด์žฌํ•˜๋Š” ์š”์†Œ๋ฅผ ๊ณจ๋ผ๋‚ด๋Š” ๋ฉ”์†Œ๋“œ(๊ต์ง‘ํ•ฉ)
  • insDisjoint(with:) : ๋‘ ์ง‘ํ•ฉ์˜ ๊ณตํ†ต ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์†Œ๋“œ(์„œ๋กœ์†Œ)
// Set๋Š” ์ง‘ํ•ฉ ์—ฐ์‚ฐ์— ์œ ์šฉ
let setA: Set<Int> = [3, 4, 5]
let setB: Set<Int> = [3, 4, 5, 6, 7]

// ๋ถ€๋ถ„์ง‘ํ•ฉ
setA.isSubset(of: setB)               // true
setB.isSubset(of: setA)               // false

// ํ•ฉ์ง‘ํ•ฉ
let union: Set<Int> = setA.union(setB)

// ํ•ฉ์ง‘ํ•ฉ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
let sortedUnion: [Int] = union.sorted()

// ๊ต์ง‘ํ•ฉ
let intersection: Set<Int> = setA.intersection(setB)

// ์ฐจ์ง‘ํ•ฉ
let subtracting: Set<Int> = setA.subtracting(setB)

//์„œ๋กœ์†Œ
let yourFirstBag = Set(["Apple", "Wo"])
let yourSecondBag = Set(["Berry", "Yo"])

let disjoint = yourFirstBag.isDisjoint(with: yourSecondBag) //true

๐Ÿ’ก Set ํƒ€์ž… ์ถ”๋ก 

var integerSet: Set<Int> = Set<Int>()

// ํƒ€์ž… ์ถ”๋ก  >> (type(of: ))
print(type(of: integerSet)) //Set<Int>

// array์™€ ๊ฐ™์€ ๋Œ€๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž… ์ถ”๋ก ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” array๋กœ ํƒ€์ž…์„ ์ง€์ •ํ•œ๋‹ค.
var set = [1,2,3]
print(type(of: set))
๋ฐ˜์‘ํ˜•