곡λΆν λ΄μ©μ μ 리ν κΈμ λλ€.
μ΅μ λ Optionals
- μ΅μ λμ΄λ?
- μ΅μ λ μΆμΆ
- μ€μννΈμ λͺ©νμ λ§λ μ΅μ λ μ¬μ©
1. μ΅μ λμ΄λ?
μ΅μ λ Optionals
: μ ν μ¬ν. κ°μ΄ μμ μλ, μμ μλ μλ€. μ¦, λ³μ λλ μμμ κ°μ΄ nil(NULL)μΌ μλ μλ€.
- μ€μννΈμ μΈμ΄μ νΉμ§ μ€ νλμΈ 'Safe- μμ ν νλ‘κ·Έλλ° μ§ν₯'μ 보μ¦νλ κΈ°λ₯μ΄λ€.
- μ€μννΈλ μ격ν λ¬Έλ²μ κ°μ§κ³ μλλ°, λ°λΌμ μ΅μ λ μ¬λΆμ λ°λΌ λμ λ€λ₯Έ νμ μΌλ‘ ꡬλΆνλ€. (μ»΄νμΌ μ€λ₯)
- λ°μ΄ν°νμ ? λλ Optional<λ°μ΄ν°νμ >
- μ΅μ
λ μ£Ό μ¬μ© λͺ©μ
- nil κ°μ λμ ν΄μΌ ν λ
- μ΄κΉκ°μ΄ μμ΄ μ΄λ€ κ°μ΄ λ€μ΄κ°μ§ λͺ¨λ₯Ό λ
- μ λ¬μΈμμ κ°μ΄ μλͺ»λ κ°μΌ κ²½μ° μ λλ‘ μ²λ¦¬νμ§ λͺ»νμμ nilλ‘ ννν μ μλ€.
- 맀κ°λ³μ λΆνμ μλ―Έλ‘ λ§€κ°λ³μ νμ μ μ΅μ λλ‘ μ μν μ μλ€.
μ΅μ λ κΈ°λ³Έ μ¬μ©
var introduce: String? = "Hi! I am yh!"
print(introduce)
//μΆλ ₯ Optional("Hi! I am yh!")
introduce = nil
print(introduce)
//μΆλ ₯ nil
- μ΅μ
λμ μ΄κ±°νμΌλ‘ ꡬνλμ΄ μλ€.
- case none : nilμΌ λ, μ¦ κ°μ΄ μλ κ²½μ°.
- case some(Wrapped) : κ°μ΄ μλ κ²½μ°. κ°μ΄ μμΌλ©΄ someμ μ°κ΄κ°μΈ Wrappedμ κ°μ΄ ν λΉλλ€.
- μ΅μ λ μμ²΄κ° μ΄κ±°νμ΄κΈ° λλ¬Έμ μ΅μ λ λ³μλ switch ꡬ문μ ν΅ν΄ κ° μ 무λ₯Ό νμΈν μ μλ€.
- switch ꡬ문 μ¬μ©λ³΄λ€λ μ΅μ λ μΆμΆμ μ¬μ©νλ νΈμ΄ λ μμ νκ³ νΈλ¦¬νλ€
μ΅μ λ μ΄κ±°νμ μ μ
public enum Optional<Wrapped> : ExpressibleByNilLiteral {
case none
case some(Wrapped)
public init(_ some: Wrapped)
...
}
2. μ΅μ λ μΆμΆ
- Optional Unwrapping
- μ΅μ λμ κ°μ μ΅μ λμ΄ μλ κ°μΌλ‘ μΆμΆ
- μ΅μ λλ‘ μ μΈλ λ³μμ κ°μ΄ ν λΉλλ©΄ κ·Έ κ°μ 'μ΅μ λμ λν(wrapped)λμλ€.'κ³ νλ©° μΈλν(unwrapping)ν΄μΌ κ°μ μ κ·Όν μ μλ€.
2.1 μ΅μ λ κ°μ μΆμΆ (κ°μ μΈλν) Forced Unwapping
- κ°!
- μ΅μ λμ κ°μ μΆμΆνλ κ°μ₯ κ°λ¨ν λ°©λ², But μ΅μ λμ λͺ©μ (Safe)μ μμ€νλ μνν λ°©λ²(λ°νμ μ€λ₯ λ°μ κ°λ₯μ± λμ)
- κ°μ μΆμΆ μ μ΅μ λμ κ°μ΄ nilμ΄λΌλ©΄ λ°νμ μ€λ₯ λ°μ
let number1: Int? = 2
let number2: Int = number1!
print(number1) //μ΅μ
λ
print(number2) //μ΅μ
λμ κ°μ μΆμΆν κ°
//μΆλ ₯
//Optional(2)
//2
2.2 μ΅μ λ λ°μΈλ© Optional Binding
- μ΅μ λμ κ° μ 무 νμΈ μ μ¬μ©νλ€.
- μ΅μ λμ κ°μ΄ nilμ΄ μλ μ, μ΅μ λμ μ μΆμΆ(μΈλν)ν κ°μ μΌμ λΈλ‘ μμμ μ¬μ©ν μ μλ μμλ λ³μλ‘ ν λΉν΄μ μ΅μ λμ΄ μλ ννλ‘ μ¬μ©ν μ μλλ‘ ν΄μ€λ€.
- μμ νκ³ μΈλ ¨λ λ°©λ²
- if λλ while ꡬ문 λ±κ³Ό ν¨κ» μ¬μ©νλ€.
- μ΅μ λ λ°μΈλ©μ ν΅ν΄ ν λ²μ μ¬λ¬ μ΅μ λ κ°μ μΆμΆ(μΈλν)ν μ μλ€. (AND 쑰건-νλλΌλ nilμ΄λ©΄ false)
var myTitle: String? = "7μ μ¬λ¦ ν΄κ°"
var myContent: String? = "μ¬λ¦ ν΄κ°λ‘ μ μ£Όλμ λλ¬κ°κΈ°λ‘ νλ€."
if let title = myTitle, var content = myContent {
//λ³μμ΄λ―λ‘ λ΄λΆμμ λ³κ²½μ΄ κ°λ₯νλ€.
content = title + "\n" + content
print(content)
} else {
print("nil")
}
/*
μΆλ ₯
7μ μ¬λ¦ ν΄κ°
μ¬λ¦ ν΄κ°λ‘ μ μ£Όλμ λλ¬κ°κΈ°λ‘ νλ€.
*/
2.3 μμμ μΆμΆ μ΅μ λ (μ묡μ μΈλν) Implicitly Unwrapped Optionals
- λ°μ΄ν°νμ !
- κ°μ μΈλνμ μ¬μ©νμ§ μμλ κ°μ μ κ·Όν μ μλ€.
- nilμ ν λΉν μ μμ΄μΌ νκ³ , λ‘μ§μ nil λλ¬Έμ λ°νμ μ€λ₯κ° λ°μνμ§ μμ κ² κ°λ€λ νμ μ΄ λ€ λ μ¬μ©
- μμμ μΆμΆ μ΅μ λλ‘ μ§μ λ νμ μ μΌλ° κ°μ²λΌ μ¬μ©ν μ μμ§λ§ μ¬μ ν μ΅μ λμ΄κΈ°μ nilλ ν λΉν μ μλ€.
- μμμ μΆμΆ μ΅μ λλ μ΅μ λμ΄κΈ°λλ¬Έμ μ΅μ λ λ°μΈλ©μ μ¬μ©ν μ μλ€.
let str1: String! = "yh"
print(str1)
//Optional("yh")
let str2: String = str1
print(str2)
//yh
3. μ€μννΈμ λͺ©νμ λ§λ μ΅μ λ μ¬μ©
μ€μννΈλ Safe, μ¦ μμ ν νλ‘κ·Έλλ°μ λͺ©νλ‘ νκ³ μλ€. κ·Έλ¦¬κ³ μ΅μ λμ μ΄μ λ§κ² μμ μ±μ 보μ¦νκΈ° μν κΈ°λ₯μ κ°μ§κ³ μλ€. λ°λΌμ μ΅μ λμ μ¬μ©ν λ, λ°νμ μ€λ₯κ° λ°μν κ°λ₯μ±μ΄ μλ 'μ΅μ λ κ°μ μΆμΆ', 'μμμ μΆμΆ μ΅μ λ' μ¬μ©μ μ§μν΄μΌ νλ€. κ·Έλ¦¬κ³ μ΅μ λ λ°μΈλ©, nil λ³ν©μ°μ°, μ΅μ λ 체μ΄λ λ±μ λ°©λ²μ μ¬μ©ν΄μΌ νλ€.
μ€μννΈ λͺ©ν
https://88yhtserof.tistory.com/17?category=966954
nil λ³ν©μ°μ°μ
https://88yhtserof.tistory.com/27?category=966954
κ³΅λΆ μλ£
μΌκ³° - μ€μννΈ νλ‘κ·Έλλ° 5ν (SWIFT5)
Do It! μ€μννΈλ‘ μμ΄ν° μ± λ§λ€κΈ° κ°μ 5ν
'Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ Swift ] νλ‘ν μ½ μ§ν₯ νλ‘κ·Έλλ° (0) | 2023.09.24 |
---|---|
[ Swift ] Serializationμ΄λ? (0) | 2023.01.18 |
[ Swift ] ν¨μ (0) | 2021.09.02 |
[ Swift ] νλ¦ μ μ΄(2) - λ°λ³΅λ¬Έ ( for-in ꡬ문, while ꡬ문 ) (0) | 2021.08.27 |
[ Swift ] νλ¦ μ μ΄(1) - 쑰건문 ( if ꡬ문, switch ꡬ문 ) (0) | 2021.08.18 |