Bibi's DevLog ๐Ÿค“๐ŸŽ

Dictionary - subscript(_: default:) ๋ณธ๋ฌธ

๐Ÿ“ฑ๐ŸŽ iOS/๐Ÿ Apple Developer Documentation

Dictionary - subscript(_: default:)

๋น„๋น„ bibi 2022. 8. 25. 23:59

subscript(_: default:) (Dictionary)

https://developer.apple.com/documentation/swift/dictionary/subscript(_:default:)

  • ๋”•์…”๋„ˆ๋ฆฌ์—์„œ ์ฃผ์–ด์ง„ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๊ณ , ๋งŒ์•ฝ ํ•ด๋‹นํ•˜๋Š” ํ‚ค๊ฐ€ ์—†์œผ๋ฉด default๋กœ ์ง€์ •๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • key : ๋”•์…”๋„ˆ๋ฆฌ์—์„œ ์ฐพ์„ ํ‚ค
    • key๊ฐ€ Hashable ์„ ์ค€์ˆ˜ํ•ด์•ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•จ
  • defaultValue : ๋”•์…”๋„ˆ๋ฆฌ์— ํ•ด๋‹น ํ‚ค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉํ•  ๊ธฐ๋ณธ๊ฐ’
  • ๋”•์…”๋„ˆ๋ฆฌ์— ํŠน์ • ํ‚ค๊ฐ€ ์กด์žฌํ•  ๋•Œ๋Š” ๊ทธ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๊ณ , ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ๋Š” default value๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ.
    • ์•„๋ž˜ ์˜ˆ์‹œ๋Š” HTTP ์‘๋‹ต ์ฝ”๋“œ๊ฐ€ ์ธ์‹๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ๋ฉ”์‹œ์ง€๋กœ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค:
var responseMessages = [200: "OK",
                        403: "Access forbidden",
                        404: "File not found",
                        500: "Internal server error"]

let httpResponseCodes = [200, 403, 301]
for code in httpResponseCodes {
    let message = responseMessages[code, default: "Unknown response"]
    print("Response \(code): \(message)")
}
// Prints "Response 200: OK"
// Prints "Response 403: Access forbidden"
// Prints "Response 301: Unknown response"
  • ๋”•์…”๋„ˆ๋ฆฌ์˜ value ํƒ€์ž…์ด value semantics์„ ๊ฐ€์งˆ ๋•Œ, ์ด ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•ด ๋”•์…”๋„ˆ๋ฆฌ ๋‚ด์—์„œ ๊ฐ’์— ๋Œ€ํ•ด ์ œ์ž๋ฆฌ(in-place) ์—ฐ์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
let message = "Hello, Elle!"
var letterCounts: [Character: Int] = [:]
for letter in message {
    letterCounts[letter, default: 0] += 1
}
// letterCounts == ["H": 1, "e": 2, "l": 4, "o": 1, ...]
  • letterCounts์— ํ‚ค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ์—์„œ letter์˜ ๊ฐ’์— ๋Œ€ํ•ด letterCounts[letter, default: 0] += 1 ์—ฐ์‚ฐ์ด ์‹คํ–‰๋  ๋•Œ,
  • ์ง€์ •๋˜์–ด ์žˆ๋Š” defalut value์ธ 0์ด ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜๋˜๊ณ , 1์ด ์ฆ๊ฐ€๋œ ๋’ค, ๊ทธ ํ‚ค์— ๋Œ€ํ•œ ๊ฐ’์œผ๋กœ ๋”•์…”๋„ˆ๋ฆฌ์— ์ถ”๊ฐ€๋œ๋‹ค.

๋…ธํŠธ
๋”•์…”๋„ˆ๋ฆฌ์˜ value ํƒ€์ž…์ด ํด๋ž˜์Šค์ผ ๋•Œ๋Š” ์ด ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋กœ ๋”•์…”๋„ˆ๋ฆฌ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š”, ํ•ด๋‹น ์—ฐ์‚ฐ ์ดํ›„์— default value์™€ key๊ฐ€ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋‹ค์‹œ ์จ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค(not written back).