μλ νμΈμ~
μ€λμ Enum(μ΄κ±°ν)μ λν΄μ μ 리νλ €κ³ ν©λλ€.
Enumμ΄λ?
Enumμ Enumeration(μ΄κ±°ν)μ μ€μλ§λ‘, μλ‘ μ°κ΄λ κ°λ€μ μ§ν©μ μ μν μ μλ μλ£νμ λλ€.
Swiftμμλ μ΄κ±°νμ΄ μΌλ°μ μΌλ‘ Int, String λ±μ μμκ°(Raw Value) λλ μ°κ΄κ°(Associated Value)μ κ°μ§ μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ½λμ κ°λ μ±μ λμ΄κ³ , μ νμ±μ μ μ§νλ©΄μ κ°κ²°ν μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
Enumμ μ¬μ©νμ§ μλ κ²½μ°
Enumμ μ¬μ©νμ§ μμΌλ©΄, μνλ₯Ό λ³μλ‘ μ μΈνκ³ μ΄λ₯Ό 쑰건문 λ±μ ν΅ν΄ λΉκ΅νμ¬ μ¬μ©ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ μ½λλ₯Ό μκ°ν΄ λ³Ό μ μμ΅λλ€.
let stateA = "State A"
let stateB = "State B"
let currentState = stateA
if currentState == stateA {
print("νμ¬ μνλ Aμ
λλ€.")
} else if currentState == stateB {
print("νμ¬ μνλ Bμ
λλ€.")
} else {
print("μνλ₯Ό μ μ μμ΅λλ€.")
}
μ΄λ κ² μνλ₯Ό StringμΌλ‘ μ μΈνκ³ , 쑰건문μΌλ‘ λΉκ΅νμ¬ μ¬μ©ν μ μμ΅λλ€.
νμ§λ§ μ΄λ κ² μ¬μ©νλ©΄ μ½λκ° κΈΈμ΄μ§κ³ κ°λ μ±μ΄ λ¨μ΄μ§λ λ±μ λ¬Έμ κ° μμ μ μμ΅λλ€.
Enumμ μ¬μ©νλ κ²½μ°
Enumμ μ¬μ©νλ©΄, μνλ₯Ό EnumμΌλ‘ μ μνμ¬ μ΄λ₯Ό λ³μλ‘ μ μΈνκ³ μ¬μ©ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ μ½λλ₯Ό μκ°ν΄ λ³Ό μ μμ΅λλ€.
enum State {
case A
case B
}
let currentState: State = .A
switch currentState {
case .A:
print("νμ¬ μνλ Aμ
λλ€.")
case .B:
print("νμ¬ μνλ Bμ
λλ€.")
}
μ΄λ κ² Enumμ μ¬μ©νλ©΄, λ³μμ κ°μ΄ μνκ° λ©λλ€. κ·Έλ¦¬κ³ switch λ¬ΈμΌλ‘ λ³μμ κ°μ λ°λΌ λ€λ₯Έ λμμ μνν μ μμ΅λλ€. μ΄λ κ°λ μ±μ΄ μ’κ³ , μ½λκ° κ°κ²°ν΄μ§λ λ±μ μ₯μ μ΄ μμ΅λλ€.
Enumμ νμ©νλ λ°©λ²
Enumμμλ rawValue, caseIterable, μ°κ΄κ° λ±μ κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€.
1. rawValue(μμκ°)
Enumμμλ rawValueλ₯Ό μ¬μ©νμ¬, Enumμ κ°μ λ€λ₯Έ κ°μΌλ‘ λ³νν μ μμ΅λλ€. rawValueλ Enumμμ κ° caseμ κ°μΌλ‘, μ μν, λ¬Έμμ΄ λ±μ μ¬μ©ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ΄ Enumμμ rawValueλ₯Ό μ¬μ©ν μ μμ΅λλ€.
enum State: Int {
case A = 0
case B = 1
}
let currentState = State(rawValue: 1)
switch currentState {
case .A:
print("νμ¬ μνλ Aμ
λλ€.")
case .B:
print("νμ¬ μνλ Bμ
λλ€.")
case nil:
print("μνλ₯Ό μ μ μμ΅λλ€.")
}
enum Color: String {
case red = "red"
case blue = "blue"
}
let redColor: Color = .red
print(redColor.rawValue) // "red"
2. caseIterable
caseIterableμ Enumμμ caseλ₯Ό λͺ¨λ λμ΄ν μ μλ κΈ°λ₯μ λλ€.
μ΄λ₯Ό μ¬μ©νλ©΄, λ€μκ³Ό κ°μ΄ λͺ¨λ caseλ₯Ό μΆλ ₯ν μ μμ΅λλ€.
enum State: String, CaseIterable {
case A = "A"
case B = "B"
}
for state in State.allCases {
print(state.rawValue)
}
// "A"
// "B"
3. μ°κ΄κ°
Enumμ κ° caseμλ μ°κ΄κ°μ μ€μ ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ΄ μ°κ΄κ°μ μ€μ ν μ μμ΅λλ€.
enum State {
case A(value: Int)
case B(value: String)
}
let currentState = State.A(value: 10)
switch currentState {
case .A(let value):
print("νμ¬ μνλ Aμ΄λ©°, κ°μ \(value)μ
λλ€.")
case .B(let value):
print("νμ¬ μνλ Bμ΄λ©°, κ°μ \(value)μ
λλ€.")
}
4. switchλ₯Ό μ΄μ©νκΈ°
switchλ¬Έμ μ΄μ©νλ©΄ Enumμ λ€μν κΈ°λ₯μ νμ©ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, Enumμμμ λͺ¨λ caseλ₯Ό μΆλ ₯νκ±°λ, μ°κ΄κ°μ΄ μλ caseλ§ μΆλ ₯νλ λ±μ κΈ°λ₯μ ꡬνν μ μμ΅λλ€.
μμ μμλ€μμλ μ§μμ μΌλ‘ switch ꡬ문μ μ¬μ©ν κ²μ μ μ μμ΅λλ€.
enum State {
case A(value: Int)
case B(value: String)
case C
}
let currentState = State.A(value: 10)
switch currentState {
case .A(let value):
print("νμ¬ μνλ Aμ΄λ©°, κ°μ \(value)μ
λλ€.")
case .B(let value):
print("νμ¬ μνλ Bμ΄λ©°, κ°μ \(value)μ
λλ€.")
case .C:
print("νμ¬ μνλ Cμ
λλ€.")
}
for state in State.allCases {
print(state)
}
for case let .A(value) in State.allCases {
print("A μνμ κ°μ \(value)μ
λλ€.")
}
μ€λμ μ¬κΈ°κΉμ§ μ λ¦¬ν΄ λ³΄κ² μ΅λλ€.
κ·ΈλΌ μ΄λ§ ππ» ππ» ππ»
'iOS > Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] Copy on write(COW)μ λν΄μ (0) | 2023.03.30 |
---|---|
[Swift] 컬λ μ νμ (Collection Type)μ λν΄μ (0) | 2023.03.26 |
[Swift] μ΅μ λ(Optional)μ λν΄μ (0) | 2023.03.17 |
[Swift] μ κ·Όμ μ΄μ(Access Control)μ λν΄μ (0) | 2023.03.15 |
[Swift] Closureμ λν΄μ μμ보μ (0) | 2023.03.13 |