Enumerations
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.
์ด๊ฑฐํ์ด๋?
- ์ ์ฌํ ์ข ๋ฅ์ ์ฌ๋ฌ ๊ฐ์ ํ ๊ณณ์ ๋ชจ์์ ์ ์ํ ๊ฒ.
- enum ์์ฒด๊ฐ ํ๋์ ๋ฐ์ดํฐ ํ์
- ๋๋ฌธ์ ์นด๋ฉ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฆ์ ์ ์.
- ๊ฐ case๋ ๊ทธ ์์ฒด๊ฐ ๊ณ ์ ์ ๊ฐ์ ๋๋ค.(๊ฐ case์ ์๋์ผ๋ก ์ ์๊ฐ์ด ํ ๋น๋์ง ์์)
- ๊ฐ case๋ ์๋ฌธ์ ์นด๋ฉ์ผ์ด์ค๋ก ์ ์
- ๊ฐ case๋ ํ ์ค์ ๊ฐ๋ณ๋ก๋, ํ ์ค์ ์ฌ๋ฌ๊ฐ๋ ์ ์ํ ์ ์์ต๋๋ค.
enum Weekday {
case mon
case tue
case wed
case thu, fri, sat, sun
}
var day: Weekday = Weekday.mon // ์ด๊ฑฐํ ํ์
๊ณผ ์ผ์ด์ค๋ฅผ ๋ชจ๋ ์ฌ์ฉ๊ฐ๋ฅ
day = .tue // ํ์
์ด ๋ช
ํํ๋ค๋ฉด .์ผ์ด์ค๋ก ํํ ๊ฐ๋ฅ
print(day) // tue
switch day {
case .mon, .tue, .wed, .thu:
print("ํ์ผ์
๋๋ค")
case Weekday.fri:
print("๋ถ๊ธ ํํฐ!!")
case .sat, .sun:
print("์ ๋๋ ์ฃผ๋ง!!")
// switch์ ๋น๊ต๊ฐ์ ์ด๊ฑฐํ ํ์
์ด ์์นํ ๋ ๋ชจ๋ ์ด๊ฑฐํ ์ผ์ด์ค๋ฅผ ํฌํจํ๋ค๋ฉด default๋ฅผ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค
}
์์๊ฐ, rawValue๋?
- ์ด๊ฑฐํ์ ์ ์ ํ์ ์ ๋ช ์ํด์ฃผ๋ฉด C ์ธ์ด์ enum ์ฒ๋ผ ์ ์ ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
- rawValue์๋ ์๋์ผ๋ก 1์ด ์ฆ๊ฐ๋ ๊ฐ์ด ํ ๋น๋ฉ๋๋ค.
- rawValue๋ case๋ณ๋ก ๊ฐ๊ฐ ๋ค๋ฅธ ๊ฐ์ ๊ฐ์ ธ์ผํฉ๋๋ค.
- rawValue๋ฅผ ๋ฐ๋์ ์ง๋ ํ์๊ฐ ์๋ค๋ฉด ๊ตณ์ด ๋ง๋ค์ง ์์๋ ๋ฉ๋๋ค.
- ์ ์ ํ์
๋ฟ๋ง ์๋๋ผ, Hashable ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ๋ชจ๋ ํ์
์ ์์๊ฐ์ ํ์
์ผ๋ก ์ง์ ๊ฐ๋ฅ
- ์ด๊ฑฐํ์ ์์๊ฐ ํ์
์ด String์ผ ๋, ์์๊ฐ์ด ์ง์ ๋์ง ์์๋ค๋ฉด case์ ์ด๋ฆ์ ์์๊ฐ์ผ๋ก ์ฌ์ฉ
enum Fruit: Int {
case apple = 0
case grape = 1
case peach // ์๋์ผ๋ก 2 ํ ๋น
// case mango = 0 // apple์ ์์๊ฐ์ ์ด๋ฏธ 0์ผ๋ก ํ ๋น๋ฌ์ผ๋ฏ๋ก mango ์ผ์ด์ค์ ์์๊ฐ์ 0์ผ๋ก ์ ์ํ ์ ์๋ค
}
print("Fruit.peach.rawValue == \(Fruit.peach.rawValue)")
// Fruit.peach.rawValue == 2
enum School: String {
case elementary = "์ด๋ฑ"
case middle = "์ค๋ฑ"
case high = "๊ณ ๋ฑ"
case university // ์ด๊ฑฐํ์ ์์๊ฐ ํ์
์ด String์ผ ๋, ์์๊ฐ์ด ์ง์ ๋์ง ์์๋ค๋ฉด case์ ์ด๋ฆ์ ์์๊ฐ์ผ๋ก ์ฌ์ฉ
}
print("School.middle.rawValue == \(School.middle.rawValue)")
// School.middle.rawValue = ์ค๋ฑ
print("School.university.rawValue == \(School.university.rawValue)")
// School.middle.rawValue = university
์์๊ฐ์ ํตํ ์ด๊ธฐํ
- ์ต์ ๋์ ์ด์ฉํ๋ฉด ์ด๊ฑฐํ ๋ณ์๋ฅผ ์์ฑํ ๋ ์์๊ฐ ์ด๊ธฐํ๋ฅผ ํตํด ์ด๊ฑฐํ ๋ณ์ ์์ฑ๊ฐ๋ฅ
- rawValue๊ฐ case์ ํด๋นํ์ง ์์ ์ ์์ผ๋ฏ๋ก, rawValue๋ฅผ ํตํด ์ด๊ธฐํ ํ ์ธ์คํด์ค๋ ์ต์ ๋ ํ
enum Fruit: Int {
case apple = 0
case grape = 1
case peach // ์๋์ผ๋ก 2 ํ ๋น
}
//let apple: Fruit = Fruit(rawValue: 0) // ERROR
if let myFruit: Fruit? = Fruit(rawValue: 0) {
print(myFruit) // apple
}
if let yourFruit: Fruit? = Fruit(rawValue: 3) {
print(yourFruit)
} // no print
์ด๊ฑฐํ ๋ฉ์๋
- Swift์ ์ด๊ฑฐํ์๋ ๋ฉ์๋ ์ถ๊ฐ ๊ฐ๋ฅ
enum Month {
case dec, jan, feb
case mar, apr, may
case jun, jul, aug
case sep, oct, nov
func printMessage() {
switch self {
case .mar, .apr, .may:
print("๋ด")
case .jun, .jul, .aug:
print("์ฌ๋ฆ")
case .sep, .oct, .nov:
print("๊ฐ์")
case .dec, .jan, .feb:
print("๊ฒจ์ธ")
}
}
}
Month.mar.printMessage()
'iOS ๐ > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Swift08 - ๊ฐ ํ์ vs ์ฐธ์กฐํ์ (0) | 2021.02.01 |
---|---|
Switf07 - ๊ตฌ์กฐ์ฒด vs ํด๋์ค vs ์ด๊ฑฐํ (0) | 2021.02.01 |
Swift-05 ๊ตฌ์กฐ์ฒด, ํด๋์ค (0) | 2021.01.31 |
Swfit-04 Optional (0) | 2021.01.26 |
Swift-03 ํจ์ (0) | 2021.01.26 |