μ΅μ λ(Optional) μ΄λ?
μ΅μ λμ΄λ κ°μ΄ μμ μλ μκ³ , μμ μλ μλ κ²μ΄λ€.
μΌλ°μ μΈ νλ‘κ·Έλλ° μΈμ΄μμλ κ°μ΄ null μΈ λ³μμ μ κ·Όνλ©΄ νλ‘κ·Έλ¨μ΄ μ’ λ£λλ€.
νμ§λ§, swiftμμλ μ΅μ λμ μ¬μ©νλ©΄ κ°μ΄ μλ λ³μμ μ κ·Όν΄λ νλ‘κ·Έλ¨μ΄ μ’ λ£λμ§ μλλ€.
μ΅μ λ(Optional) μ μ¬μ©νλ μ΄μ
κ°μ΄ μλ λ°μ΄ν° 곡κ°μ μ κ·Όνλ €κ³ νλ©΄ μλ¬κ° λ°μνλ€.
κ°μ μ΄κΈ°ννμ§ μμκΈ° λλ¬Έμ λ©λͺ¨λ¦¬μ κ°μ΄ μ μ₯λμ΄ μμ§ μμ κ²μ΄λ€. νΉμ, ‘μ°λ κΈ° κ°’μ΄ μ μ₯λμ΄ μμ κ²μ΄λ€.
μ½λλ‘ κ°λ¨νκ² μμλ₯Ό λ€μ΄λ³΄κ² λ€.
var name : String
print(name)
μμ μμλ₯Ό μ€νμμΌλ³΄λ©΄ μλ¬κ° λ°μν κ²μ΄λ€. μλλ©΄ nameμλ μλ¬΄λ° κ°μ΄ μμ§ μκΈ° λλ¬Έμ΄λ€.
κ·ΈλΌ μ±μ΄ κΊΌμ§μ§ μκ² νλ €λ©΄ μ΄λ»κ² ν΄μΌλ κΉ?
μ΅μ λ(Optional) νμ
μ΅μ λ νμ μ nilμ΄λΌλ ν€μλμ ?λ₯Ό μ¬μ©νλ€. κ·Έλ¦¬κ³ μΈλνμ νκΈ° μν΄ !λ₯Ό μ¬μ©νλ€.
nilμ κ°μ΄ μμμ νννλ ν€μλμ΄λ€. μ°λ¦¬κ° CμΈμ΄μμ nullμ μ¬μ©νλ κ²μ΄ κΈ°μ΅μ΄ λλ€λ©΄, λΉμ·ν κ°λ μ΄λΌκ³ μκ°νλ©΄ λλ€.
var name : String?
print(name) //nil
name = "Gahyun"
print(name) //Optional(Gahyun)
nameμ “Gahyun”μ λ£μλλ° μ μΆλ ₯μ νλ©΄ Optional(Gahyun)μΌλ‘ λμ¬κΉ?
λ©λͺ¨λ¦¬ 곡κ°μ κ°μ΄ μμ λ μ κ·Όνλ €λ©΄ μλ¬κ° λ°μνλλ°, μ΄ λ λ©λͺ¨λ¦¬ 곡κ°μμ μμλ‘ Optional νμ μΌλ‘ μ μΈνμ¬ μμκ°μΌλ‘ nilμ λ΄μ λλ κ²μ΄λ€.
κ·ΈλΌ String μ΄λ String?μ κ°μ νμ μΈκ°? μλλ€. Stringμ λ¬Έμμ΄ νμ μ΄κ³ String?μ μ΅μ λ λ¬Έμμ΄ νμ μ΄λ€.
μ΅μ λ(Optional) νμ μΆμΆ λ°©λ²
- κ°μ μΆμΆ
- nilμΈμ§ μλμ§ νμΈ ν κ°μ μΆμΆ
- if let λ°μΈλ©
- guard let λ°μΈλ©
- Nil - Coalescing
//1. κ°μ μΆμΆ
print(name!)
//2. nilμΈμ§ μλμ§ νμΈ ν κ°μ μΆμΆ
if name != nil {
print(name!)
}
//3. if let λ°μΈλ©
if let name = optionalName {
print(name)
}
//4. guard let λ°μΈλ©
guard let name = optionalName else { return }
print(name)
//5. Nil - Coalescing
optionalName ?? "Gahyun"
μ΅μ λ λ°μΈλ©(Optional Binding)
μ¬κΈ°μ μ‘°κΈ λ μμΈν λ³Ό μ΅μ λ μΆμΆ λ°©λ²μ μ΅μ λ λ°μΈλ©(if let, guard let)μ΄λ€.
μ΅μ λ λ°μΈλ©μ κ°μ λ‘ μ΅μ λμ μ¬λ λ°©μμ΄ μλλΌ, μμ νκ² νμΈμ ν΄λ³΄κ³ μ¬λ λ°©μμ΄λ€.
if letκ³Ό guard letμ μ¬μ©ν΄μ μ΅μ λ μΆμΆμ νλ€.
μ½λλ‘ κ°λ¨νκ² μμλ₯Ό λ€μ΄λ³΄κ² λ€.
class Snack {
var name : String?
var price : Int?
func buy() {
print("κ΅¬λ§€κ° μλ£λμμ΅λλ€. ")
}
}
var popcorn : Snack? = Snack() //Optional Snack νμ
μΌλ‘ popcorn μ μΈ
popcorn?.name = "caramel popcorn" //μ΅μ
λ νμμ nameμ μ κ·Όνκ³ μΆμΌλ©΄ ? μ λΆμ¬μΌ ν¨
popcorn?.price = 1500 //μ΅μ
λ νμ
μ κ·Ό μ ? μ λΆμ
print(popcorn?.name) //Optional("caramel popcorn")
Snackμ΄λΌλ ν΄λμ€μ κ³Όμ μ΄λ¦κ³Ό κ°κ²©μ μ΅μ λ λ¬Έμμ΄ νμ , μ΅μ λ μ μ νμ μΌλ‘ μ μΈνλ€.
κ·Έλ¦¬κ³ , κ·Έ μμ ꡬ맀 ν¨μλ₯Ό λ£μ΄λ³΄μλ€.
popcornμ Optional Snack νμ μΌλ‘ μ μΈνκ³ , ? μ μ¬μ©ν΄μ μ΄λ¦κ³Ό κ°κ²©μ μ κ·Όνλ€.
μΆλ ₯μ ν΄λ³΄λ©΄ Optional()μ κ°μΈμ Έμ μΆλ ₯μ΄ λλ€.
κ°μ μΆμΆκ³Ό μ΅μ λ λ°μΈλ©μ μ¬μ©ν΄μ “caramel popcorn” λ§ μΆλ ₯λλλ‘ ν΄λ³΄κ² λ€.
// κ°μ μΆμΆ
print((popcorn?.name)!)
// if let λ°μΈλ©
if let snackname = popcorn?.name {
print(snackname)
}
// guard let λ°μΈλ©
guard let snackname = popcorn?.name else { return }
print(snackname)
μΈ κ°μ§ κ²½μ° λͺ¨λ “caramel popcorn”λ§ μΆλ ₯μ΄ λ κ²μ΄λ€.
if let vs guard let
λ κ°μ§ λͺ¨λ μ΅μ λ λ°μΈλ©μμ λνμ μΌλ‘ μ¬μ©λλ ꡬ문μ΄λ€. νμ§λ§ μ°¨μ΄μ μ΄ μλ€.
guard letμ μμ μμ μ΅μ λ κ°μ ν λΉνλ€λ©΄ μ μλ³μλ‘ μ¬μ©ν μ μλ€. μ¦, guard let ꡬ문 λ°μμλ μμλ₯Ό μμ λ‘κ² μ¬μ©ν μ μλ€λ κ²μ΄λ€.
λ°λ©΄μ, if letμ ν λΉ μμλ₯Ό if let ꡬ문 μμμλ§ μ¬μ©ν μ μλ€.
μ΅μ λ 체μ΄λ (Optional Chaining)
μ΅μ λ 체μ΄λμ, νλλΌλ nilμ return νλ€λ©΄ λ°λ‘ nilμ return νλ€.
. (dot)μ ν΅ν΄ λ΄λΆ νλ‘νΌν°λ λ©μλμ μ΅μ λ κ°μ΄ νλλΌλ κ»΄ μμΌλ©΄ κ·Έκ²μ μ΅μ λ 체μ΄λμ΄λ€.
let age = gahyun?.info.age
μμ μ½λμμ ageλ Optional(age.type)μ΄λ€. μ¦, μ΅μ λ 체μ΄λμ κ²°κ³Όκ°μ νμ μ λ§μ§λ§ ννμμ μ΅μ λ νμ μΈ κ²μ΄λ€.
'π± Mobile > iOS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[iOS - Swift] Any, AnyObjectμ μ°¨μ΄μ μ? (0) | 2023.08.26 |
---|---|
[iOS - Swift] Singleton Pattern μ±κΈν€ ν¨ν΄μ΄λ? (0) | 2023.08.24 |
[iOS - Swift] is, as νμ μΊμ€ν (μ μΊμ€ν , λ€μ΄ μΊμ€ν ) (0) | 2023.08.02 |
[iOS - Swift] extension(νμ₯) μ λν΄ (0) | 2023.07.31 |
iOS - Delegate Pattern (λΈλ¦¬κ²μ΄νΈ ν¨ν΄) (0) | 2023.07.28 |