๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป/Swift

10. ์˜ต์…”๋„ - iOS ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ ์Šค์œ„ํ”„ํŠธ ๊ธฐ์ดˆ

reujusong 2020. 6. 17. 17:31

- ์˜ต์…”๋„์ด๋ž€??

  • ๊ฐ’์ด ์žˆ์„ ์ˆ˜๋„, ์—†์„ ์ˆ˜๋„ ์žˆ์Œ์„ ํ‘œํ˜„
  • nil์ด ํ• ๋‹น ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ํ‘œํ˜„
// someOptionalParm์— nil์ด ํ• ๋‹น ๋  ์ˆ˜ ์žˆ๋‹ค.
func someFunction(someOptionalParam: Int?) {
       // ....
}

/// someOptionalParm์— nil์ด ํ• ๋‹น ๋  ์ˆ˜ ์—†๋‹ค.
func someFunction(someOptionalParam: Int) {
       // ....
}

someFunction(someOptionalParam: nil)
// someFunction(someParam: nil) 

 

- ์˜ต์…”๋„์„ ์“ฐ๋Š” ์ด์œ 

  • ๋ช…์‹œ์  ํ‘œํ˜„

          1. nil์˜ ๊ฐ€๋Šฅ์„ฑ์„ ์ฝ”๋“œ๋งŒ์œผ๋กœ ํ‘œํ˜„๊ฐ€๋Šฅ
          2. ๋ฌธ์„œ/์ฃผ์„ ์ž‘์„ฑ ์‹œ๊ฐ„ ์ ˆ์•ฝ

  • ์•ˆ์ „ํ•œ ์‚ฌ์šฉ

          1. ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์ด ์˜ต์…”๋„์ด ์•„๋‹ˆ๋ผ๋ฉด nil ์ฒดํฌ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ๊ฐ€๋Šฅ
          2. ์˜ˆ์™ธ ์ƒํ™ฉ์„ ์ตœ์†Œํ™” ํ•˜๋Š” ์•ˆ์ „ํ•œ ์ฝ”๋”ฉ
          3. ํšจ์œจ์  ์ฝ”๋”ฉ

 

 

- ์˜ต์…”๋„ ๋ฌธ๋ฒ•๊ณผ ์„ ์–ธ

  • ์˜ต์…”๋„ ๋ฌธ๋ฒ• = enum + generics
  • ์˜ต์…”๋„ ์„ ์–ธ
enum Optional<Wrapped>: ExpressibleByNiliteral {
         case none
         case some(Wrapped)
}

let optionalValue: Optional<Int> = nil
let optionalValue: Int? =nil

 

  • ์˜ต์…”๋„ ํ‘œํ˜„

          1. ๋Š๋‚Œํ‘œ(!)๋ฅผ ์ด์šฉํ•œ ์•”์‹œ์  ์ถ”์ถœ ์˜ต์…”๋„ 

 

// Implicitly Unwrapped Optional
var implicitlyUnwrappedOptionalValue: Int! = 100

switch implicitlyUnwrappedOptionalValue {
case .none:
    print("This Optional variable is nil")
case .some(let value):
    print("Value is \(value)")
}

// ๊ธฐ์กด ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
implicitlyUnwrappedOptionalValue = implicitlyUnwrappedOptionalValue + 1

// nil ํ• ๋‹น ๊ฐ€๋Šฅ
implicitlyUnwrappedOptionalValue = nil

// ์ž˜๋ชป๋œ ์ ‘๊ทผ์œผ๋กœ ์ธํ•œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ ๋ฐœ์ƒ
//implicitlyUnwrappedOptionalValue = implicitlyUnwrappedOptionalValue + 1

 

          2. ๋ฌผ์Œํ‘œ(?)๋ฅผ ์ด์šฉํ•œ ์˜ต์…”๋„

 

// Optional
var optionalValue: Int? = 100

switch optionalValue {
case .none:
    print("This Optional variable is nil")
case .some(let value):
    print("Value is \(value)")
}

// nil ํ• ๋‹น ๊ฐ€๋Šฅ
optionalValue = nil

// ๊ธฐ์กด ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ๋ถˆ๊ฐ€ - ์˜ต์…”๋„๊ณผ ์ผ๋ฐ˜ ๊ฐ’์€ ๋‹ค๋ฅธ ํƒ€์ž…์ด๋ฏ€๋กœ ์—ฐ์‚ฐ๋ถˆ๊ฐ€
//optionalValue = optionalValue + 1