-
Optional Unwrapping - OptionalsiOS/π Swift 2020. 10. 9. 12:27
Optional Unwrapping
"μ΅μ λμΈ κ°μ μ΅μ λμ΄ μλ κ°μΌλ‘ μΆμΆνλ κ²"
nil μ΄ μλ μ΅μ λ κ°μ ν¬μ₯λμ΄ μμ΅λλ€.
κ°μ μ¬μ©νλ €λ©΄ κΊΌλ΄μΌ ν©λλ€.
μ΄κ²μ Unwrapping μ΄λΌ ν©λλ€. ' κ°μ μΆμΆνλ€ ' λΌκ³ νννκΈ°λ ν©λλ€.
μΆμΆμλ 3κ°μ§ λ°©λ²μ΄ μμΌλ, 1κ°μ§ λ°©λ²λ§ μ¬μ©νκ³ λλ¨Έμ§λ μ§μν΄μΌ ν©λλ€.
κ·Έ λ°©λ²μ΄ λ°λ‘ Optional Binding μ λλ€.
Optional Binding
" μ€μννΈκ° μ 곡νλ μμ νκ³ μΈλ ¨λ nil μ²΄ν¬ λ°©λ² "
μ°λ¦¬λ nil μ΄ μλ μ΅μ λ κ°μ μΆμΆν΄μΌ ν©λλ€.
μΆμΆ ν μ κ·Όμ νλλ° κ°μ΄ nil μ΄λΌλ©΄, λ°νμ μλ¬κ° λ°μνκΈ° λλ¬Έμ λλ€.
Optional Binding μ λ¨μν μ΅μ λ κ°μ΄ nil μΈμ§ μλμ§ νμΈ ν κ°μ μ¬μ©νμ§ μμ΅λλ€.
κ·Έκ²μ κΈ°μ‘΄μ λ€λ₯Έ νλ‘κ·Έλλ° μΈμ΄μμ null 체ν¬λ₯Ό νμΈνλ λ°©λ²κ³Ό λ€λ₯΄μ§ μμ΅λλ€.
κΈ°μ‘΄μ λ°©μ:
if optionalVal != nil { // nil μ΄ μλλ©΄ μΆμΆνλ μ½λ }
Optional Binding μ μ΄μ©ν λ°©μ:
if var realVal = optionalVal { // nil μ΄ μλ κ²½μ°μλ§ if λΈλ‘μ μ§μ νκ² λ©λλ€. // λν realVal μ if λΈλ‘ λ΄μμλ§ μΈ μ μμ΅λλ€. } else { // realVal μ¬μ© λΆκ° }
λν realVal μ μμλ‘ μ¬μ©νλ €λ©΄ let μΌλ‘ μ μΈν΄μ£Όλ©΄ λ©λλ€.
κ·Έλ¦¬κ³ λ§μ½ realVal μ λΈλ‘ μ΄νμμλ μ¬μ©νκ³ μΆλ€λ©΄, guard λ¬Έμ μ¬μ©ν΄μ£Όλ©΄ λ©λλ€.
guard let realVal = optionalVal else { // optionalVal μ΄ nil μ΄λΌλ©΄ Binding μ€ν¨ // Binding μ€ν¨ μ, else λΈλμ μ§μ ν©λλ€. κ·Έλ¦¬κ³ Early Exit. } realVal = someVal // μλ¬. μ΄λ²μλ realVal μ μμλ‘ μ μΈνκΈ° λλ¬Έμ λλ€. let newVal = realVal // guard λ¬Έμ μ¬μ©νλ©΄ λΈλ‘ μ΄νμμλ μ¬μ©ν μ μμ΅λλ€.
μ΄ μΈμ Uwrapping λ°©λ²
μ¬μ©μ μ§μν΄μΌ νκΈ° λλ¬Έμ κ°λ¨νκ²λ§ μ 리νλ €κ³ ν©λλ€.
' ! ' λ₯Ό μ¬μ©νλ κ°μ μΆμΆ(Forced Unwrapping) κ³Ό μμμ μΆμΆ μ΅μ λ (Implicitly Unwrapped Optionals) μ΄ μμ΅λλ€.
1. Forced Unwrapping
κ°μ μΆμΆμ μ΅μ λ νμ μ ' ! ' λ₯Ό λΆμ¬μ£Όμ΄ nil 체ν¬λ₯Ό νμ§ μκ³ μΆμΆν©λλ€.
λ°λΌμ κ°μ μΆμΆν κ°μ΄ nil μΌ κ²½μ° λ°νμ μλ¬κ° λ°μν©λλ€.
2. Imlicitly Unwrapped Optionals
μμμ μΆμΆ μ΅μ λμ νμ μΈμ ' ? ' λμ ' ! ' κ° λΆμ΅λλ€.
μ΄ νμ μλ nilμ ν λΉν μ μκ³ , νΉμ 쑰건 μμ μ¬μ© μ λ°λ‘ μΆμΆμ΄ νμ μλ€λ μ μ΄ νΉμ§μ λλ€. μ¦, λ€λ₯Έ νμ μ²λΌ κ·Έλ₯ μ¬μ©ν μ μμ΅λλ€.
μ¬μ© μ 100%μ νμ μΌλ‘ nil μ΄ μλ κ²μ΄λΌκ³ μκ°λ λ μΈ μ μμ΅λλ€.
" When you access an implicitly unwrapped optional, the system assumes it has a valid value and automatically unwraps it for you. Note that this causes the app to terminate if the variable’s value has not yet been set. "
μμμ μΈκΈν νΉμ 쑰건 μ΄λ λ€μκ³Ό κ°μ΅λλ€.
let num: Int! = 12 let a = num //a : Int? let b: Int = num //b : Int //type annotation λ κ²½μ°λ§ μλμΌλ‘ Unwrapping λλ€.
λ!
'iOS > π Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Type Inference - Data Types (0) 2020.11.03 3 features of First Class Citizen - Function (0) 2020.11.02 Tuples - Tuples (0) 2020.10.25 Swift) Raw Value - Enumeration (0) 2020.10.24 Optionals - Optionals (0) 2020.10.09