- Swift Document - Enumeration
https://docs.swift.org/swift-book/LanguageGuide/Enumerations.html
An enumeration defines a common type for a group of related values and enables you to work with those values in a type-safe way within your code. - Swift document
μ¦, enumμ μ°κ΄λ κ°μ κ°μ§ κ·Έλ£Ήμ 곡λλ μλ£νμ μ μνκΈ° μν΄ μ¬μ©λλ μλ£νμ λλ€.
type-safe : enumμ μ¬μ©ν¨μΌλ‘μ¨ μνμ§ μλ κ°μ΄ μλͺ» μ λ ₯λκ±°λ, μ΄λ―Έ μ μλμ΄ μ νλ κ° μ€μμ μ νμ νλλ‘νμ¬ μλͺ»λ μλ£κ° μ λ ₯λλ κ²μ λ°©μ§
μ΄κ±°νμμ λ°μ΄ν°λ κ°μ²΄ μ μ μμ μ ν¨κ» μ μλμ΄ μμ λ λ³κ²½μ΄ λΆκ°λ₯νκ³ μ΄λ μ μλ caseλ₯Ό .[caseName]
μΌλ‘ μ κ·Όν μ μκΈ° λλ¬Έμ μ½λμ μ νμ±κ³Ό μμ μ±μ λμ΄κ³ μ½λμ κ°λ
μ±λ λμΌ μ μμ΅λλ€.
λν, Swift
μ μ΄κ±°νμ μμκ° (raw value) λ₯Ό μ¬μ©νμ¬ κ° κ²½μ°μ λ°λΌ String
, Character
, Int
, Float
μ μ€μ ν μ μμ΅λλ€.
enum CompassPoint {
case north
case south
case east
case west
}
raw value κ° μλ Enum μ μ μΈν λλ enumμ μ΄λ¦κ³Ό ν΄λΉ enumμ΄ κ°μ§ μ μλ κ°λ€μ caseλ‘ μ€μ ν μ μμ΅λλ€.
var direction1 = CompassPoint.north
var direction2 : CompassPoint = .south
μμ κ°μ΄ μ μΈνμ¬ μ¬μ©ν μ μκ³ , 미리 μ μΈλ caseμ κ°λ€λ‘λ§ μ μΈμ ν μ μμ΅λλ€ π
C λ Objective-C μμμ Enumκ³Ό λ¬λ¦¬ Swiftμμλ κΈ°λ³Έμ μΌλ‘ μ μκ°μ΄ ν λΉλμ§ μμ΅λλ€.
λμ , κ° caseμ String
, Character
, Int
, Float
μ raw value λ‘ μ€μ ν μ μμ΅λλ€.
enum μ μΈμ raw valueλ‘ κ°μ§ μλ£νμ λͺ μν΄μ£Όλ©΄ λ©λλ€!
enum CompassPoint : Int {
case north // 0
case south // 1
case east // 2
case west // 3
}
raw valueλ₯Ό IntνμΌλ‘ μ μΈνκ² λλ©΄ 첫 caseκ° 0, λ€μ case λΆν° 1μ© μ¦κ°λ κ°μ κ°μ§κ² λ©λλ€.
enum CompassPoint : Int {
case north = 0 // 0
case south // 1
case east = 10 // 10
case west // 11
}
λν, νΉμ κ°μ μ μΈν μ μκ³ μ μΈλμ§ μλ caseμ λν΄μλ μ΄μ case + 1
μ κ°μ κ°μ§κ² λ©λλ€.
Int νμ΄ μλ μλ£νμ λν΄μλ λͺ¨λ caseμ λν΄ raw valueλ₯Ό μ μΈν΄μΌ ν©λλ€.
enum CompassPoint : Float {
case north = 1.0 // 1.0
case south = 2.0 // 2.0
case east = 3.0 // 3.0
case west = 4.0 // 4.0
}
μμ κ°μ΄ μ μΈνκ±°λ, μλ΅νκ³ μΆλ€λ©΄ μ΄μ case μ raw valueλ₯Ό μ μκ°μΌλ‘ μ λ ₯ν΄μΌν©λλ€.
enum CompassPoint : Float {
case north = 1.0 // 1.0
case south = 2.0 // 2.0
case east = 3 // 3.0
case west // 4.0
}
enum CompassPoint : Character {
case north = "N"
case south = "S"
case east = "E"
case west = "W"
}
Character type μ κ²½μ° λͺ¨λ caseμ λν΄ raw valueλ₯Ό μ μΈν΄μΌν©λλ€!
enum CompassPoint : String {
case north = "North" // North
case south = "South" // South
case east // east
case west // west
}
String type μ κ²½μ° μ€μ λμ§ μμ raw valueλ caseμ μ΄λ¦μΌλ‘ μμ±λμ΄ νΈνκ² μ΄μ©ν μ μμ΅λλ€ π
enum CompassPoint {
case north
case south
case east
case west
}
var direction : CompassPoint? = .north
switch direction {
case .north :
print("head to north")
case .south :
print("head to south")
case .east :
print("head to east")
case .west :
print("head to west")
default :
print("direction not found")
switch
, for
λ± enumμ μ¬μ©νλ©΄ κ°λ
μ±κ³Ό μμ μ± λμ μ½λλ₯Ό ꡬνν μ μμ΅λλ€!
enum CompassPoint : Int {
case north // 0
case south // 1
case east // 2
case west // 3
}
var direction = CompassPoint.north
print(direction.rawValue) // Optional(0)
Enumμ raw value μ κ·Όμ .rawValue
λ‘ μ κ·Όν μ μμ΅λλ€.
μ΄λ Optional
κ°μ΄ λ°νλ¨μ μκ³ μμ΄μΌ ν©λλ€! (raw value κ° μμ κ²½μ° nil λ°ν!)
enumμ μ΄λ¦ λ€ : CaseIterable
λ₯Ό μ
λ ₯ (Conforming CaseIterable
Protocol) νκ³ [enumName].allCases
μ ν΅ν΄ enumμ νλμ λ°°μ΄μ²λΌ μ¬μ©ν μ μμ΅λλ€.
enum CompassPoint : CaseIterable {
case north
case south
case east
case west
}
print(CompassPoint.allCases.count) // 4
for c in CompassPoint.allCases {
print(c)
}
// north
// south
// east
// west
μ€λμ λμ± μμ μ± λκ³ κ°λ μ± λμ μ½λλ₯Ό ꡬνν μ μλ enumeration μ΄κ±°ν μλν΄ μμ보μμ΅λλ€.
λ€μμΌλ‘ enumμ μ¬ν νμ©μΈ Recursive Enumerations
, Associated Values
, Enum Extension
λ±μ λν΄ μμλ³΄κ² μ΅λλ€!
νλ¦° μ 보 λλ κΆκΈν μ μ΄ μλ€λ©΄ λκΈ λΆνλ립λλ€! μ½μ΄μ£Όμ μ κ°μ¬ν©λλ€βΌοΈ