πŸ‘©πŸ»‍πŸ’»/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