๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
iOS/Swift

Swift) Optional Binding

by Jiseong 2022. 2. 10.

๐Ÿ“Œ Optional Binding

๋ณ€์ˆ˜์— ๊ฐ’์ด ์ €์žฅ๋ ์ง€ ์•„๋‹์ง€๋ฅผ ํ™•์‹คํ•  ์ˆ˜ ์—†์„ ๋–„ Optional์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

Optional Binding์€ Optional ํƒ€์ž…์˜ ๋ณ€์ˆ˜๊ฐ’์„ ๊บผ๋‚ด์˜ค๋Š” ๋ฐฉ๋ฒ•์ค‘ ํ•˜๋‚˜์ด๋‹ค.

๐Ÿถ guard

guard๋ฅผ ์‚ฌ์šฉํ•œ ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ์„ ์•Œ์•„๋ณด๊ธฐ์ „ guard๋ถ€ํ„ฐ ์•Œ์•„๋ณด๊ฒ ๋‹ค.

 

guard ๋’ค์— ๋”ฐ๋ผ๋ถ™๋Š” ์ฝ”๋“œ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ True์ผ ๋•Œ guard๋ฌธ ๋ฐ‘์˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

 

False๋ผ๋ฉด else๋ธ”๋ก ๋‚ด๋ถ€ ์ฝ”๋“œ๋งŒ ์‹คํ–‰๋œ๋‹ค.

 

์ด ๋‚ด๋ถ€ ์ฝ”๋“œ์—๋Š” ์ž์‹ ๋ณด๋‹ค ์ƒ์œ„์˜ ์ฝ”๋“œ๋ธ”๋ก์„ ์ข…๋ฃŒํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋“ค์–ด๊ฐ€์•ผํ•œ๋‹ค.

Ex) return, break, continue, throw

๐Ÿฑ guard let

guard let์€ ์˜ˆ์™ธ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ฃผ๋กœ ์“ฐ์ธ๋‹ค.

 

์˜ต์…”๋„์„ ๋ฒ—๊ฒผ์„ ๋•Œ ๊ฐ’์ด nil์ด๋ฉด ๋”์ด์ƒ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œํ‚ค์ง€ ์•Š๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๊ฐ•ํ•˜๋‹ค.

 

  • nil์ผ๋•Œ๋งŒ ๊ด€์‹ฌ์„ ๊ฐ€์ง (์˜ˆ์™ธ(์—ฌ๊ธฐ์„  nil) ์ฒ˜๋ฆฌ)
func twice(price: Int?) {
    guard let price = price else { return }
    print(2 * price)
}

์œ„์™€ ๊ฐ™์ด guard let์€ ๊ฐ’์ด nil์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ์ฒดํฌํ•˜์—ฌ ๊ฐ’์ด nil์ด๋ฉด ์ฝ”๋“œ ์‹คํ–‰์„ ์ค‘์ง€์‹œํ‚จ๋‹ค.

 

๋งŒ์•ฝ ๊ฐ’์ด nil์ด๋ฉด else๋ฅผ ํƒ€์„œ return์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰์„ ์ค‘์ง€์‹œํ‚ค๊ณ , ๊ฐ’์ด ์กด์žฌํ•œ๋‹ค๋ฉด else๋ฅผ ํƒ€์ง€์•Š๊ณ  ๋ฐ‘์˜ ์ฝ”๋“œ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿญ if let

if let์€ ๊ฐ’์ด nil์ผ ๋•Œ์™€ nil์ด ์•„๋‹ ๋•Œ๋ฅผ ๊ฐ๊ฐ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ์ •ํ•ด์ฃผ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

 

๊ฐ’์˜ ์œ ๋ฌด์— ๋”ฐ๋ผ ๊ฐ๊ฐ ์ƒํ™ฉ์— State๋ฅผ ์ฃผ๊ณ ์‹ถ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๊ฐ•ํ•˜๋‹ค.

 

  • nil์ผ๋•Œ์™€ nil์ด ์•„๋‹๋•Œ, ๋‘ ์ƒํ™ฉ ๋‹ค ๊ด€์‹ฌ์„ ๊ฐ€์ง
func twice(price: Int?) {
    if let price = price {
        print(2 * price)
    }
    else { 
        print("Error")
    }
}

์ƒํ™ฉ์„ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋ชจ์Šต์ด๋‹ค.

๐Ÿน guard let๊ณผ if let์˜ ์ฐจ์ด

guard let ์œผ๋กœ ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ์„ ํ•  ๊ฒฝ์šฐ, ๋ฐ”์ธ๋”ฉ๋œ ์ƒ์ˆ˜๋ฅผ guard ๊ตฌ๋ฌธ ์‹คํ–‰์ฝ”๋“œ ์•„๋ž˜๋ถ€ํ„ฐ ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์ง€์—ญ์ƒ์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๋ฐ˜๋ฉด if let์œผ๋กœ ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ์„ ํ•  ๊ฒฝ์šฐ, ๋ฐ”์ธ๋”ฉ๋œ ์ƒ์ˆ˜๋Š” ๊ทธ ๋ธ”๋Ÿญ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

image

 

์œ„ ์‚ฌ์ง„์€ if let ์ฝ”๋“œ ๋ธ”๋Ÿญ ์™ธ๋ถ€์—์„œ test1 ์ƒ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๋ชจ์Šต์„ ๋ณด์—ฌ์ค€๋‹ค

// if let๋กœ ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ ๋œ ์ƒ์ˆ˜๋Š” ๊ทธ ๋ธ”๋Ÿญ ์•ˆ์—์„œ๋งŒ ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
func test1Function() {
    if let test1 = productsList[0] {
        print(test1) // Compile Error - Cannot find 'test1' in scope
    }
    print(test1)
}

// guard let๋กœ ๋ฐ”์ธ๋”ฉ๋œ ์ƒ์ˆ˜๋ฅผ guard ๊ตฌ๋ฌธ ์‹คํ–‰ ์ฝ”๋“œ ์•„๋ž˜๋ถ€ํ„ฐ ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ ์ง€์—ญ์ƒ์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
func test2Function() {
    guard let test2 = productsList[1] else {
        return
    }
    print(test2)
}

๊ฐ„๋‹จํ•˜๊ฒŒ ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค.

'iOS > Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Swift) Error Handling  (0) 2022.02.12
ํ•จ์ˆ˜ ์ „๋‹ฌ์ธ์ž๋ช…๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…  (0) 2022.02.12
[Swift] Closure  (0) 2021.09.24
[Swift] Functions  (0) 2021.09.23
M1 error running pod install  (0) 2021.09.20

๋Œ“๊ธ€