์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- duno
- algoritm
- concurrency
- SOPT
- APPJAM
- GCD
- ๋์ ๊ณํ๋ฒ
- Til
- ๊ณ ๋์ kit
- algorithm
- DynamicProgramming
- discardableResult
- BFS
- Swift
- SwiftUI Tutorials
- IOS
- SQL
- GroupBy
- SwiftUI
- SwiftUI ํํ ๋ฆฌ์ผ
- binarySearch
- URLSession
- dfs
- HAVIT
- ์ด์งํ์
- 0์ด๋์ด์๋๊ธธ
- ๊ธฐ์ด๋ฌธ๋ฒ
- ์ฐ์ํ์ค๋ถ๋ถ์์ด์ํฉ
- ๋ค์ด๋๋ฏนํ๋ก๊ทธ๋๋ฐ
- ํ๋ก๊ทธ๋๋จธ์ค
- Today
- Total
suvera-dev ๐ฅฆ
Swift ) ๊ธฐ์ด ๋ฌธ๋ฒ 3์ผ์ฐจ - Enum ๋ณธ๋ฌธ
Swift ๊ธฐ์ด๋ฌธ๋ฒ 3์ผ์ฐจ Enum
์ค์ ๊ฐ์์์๋ ๋งค์ฐ ๊ฐ๋จํ๊ฒ ์ค๋ช ํด์ฃผ์์ง๋ง, ํ์์ ์ ๋ฆฌํด๋๊ณ ์ถ์๋ ๋ด์ฉ๋ค์ ์ถ๊ฐํ์๋ค !
๐ Enum ์ด๋ ? ๊ฐ๋จํ ๋งํ๋ฉด ์์ ์ญํ ์ ํ๋ ๊ฐ๋ค์ ๋ณด๊ธฐ ์ฝ๊ฒ ๋์ดํด๋๋ ๊ฒ
+ ๊ฐ์ ์ฃผ์ ๋ก ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ค์ ๋ฉค๋ฒ๋ก ๊ตฌ์ฑํ์ฌ ๋ํ๋ด๋ ์๋ฃํ
โฑ ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ ์ด์ ?
- ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ , ์ฝ๋ ๊ฐ๋ ์ฑ๋ ์ข์์ง๊ณ , ์ค์๋ฅผ ์ค์ฌ์ค๋ค !
- ๋ํ Heap์ ์ ์ฅ๋๋ String๊ณผ ๋ฌ๋ฆฌ, Enum์ ๊ฐ ํ์์ผ๋ก Stack์ ์ ์ฅ๋์ด ์ฑ๋ฅ๋ฉด์์์ ํฅ์๋ ์๋ค๊ณ ํ๋ค !
- ๊ณตํต๋ ์ฃผ์ ์ ๋ํด์ ์ด๋ฏธ ์ ํด๋์ ์ ๋ ฅ ๊ฐ๋ง ์ ํํด์ ๋ฐ๊ณ ์ถ์ ๋ ์ฌ์ฉ !
1. ์์ ๊ฐ์ด ์๋ ์ด๊ฑฐํ
import UIKit
// ํ๊ต - ์ด, ์ค, ๊ณ
enum School {
// case elementary
// case middle
// case high
case elementary, middle, high
}
let yourSchool = School.high
//print("yourSchool: \(yourSchool)")
print("yourSchool: ", yourSchool)
์ฐ๋ฆฌ๊ฐ ์ ์ธํ ์ด ์ด๊ฑฐํ์ด ํ๋์ ์๋ฃํ์ด ๋์ด ์ ์ธํ ์ด๊ฑฐํ์ ํ์ ์ฒ๋ผ ์ฌ์ฉํ๊ณ ,
์ด๊ฑฐํ์ผ๋ก ํ์ ์ด ์ง์ ๋ ๊ฒฝ์ฐ, .(์ ๋ฌธ๋ฒ)์ ์ด์ฉํด ๋ด๊ฐ ์ ์ธํ case์ ํํด์๋ง ์ ๊ทผ !
=> ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ค์๋ฅผ ์ค์ฌ์ค๋๋ค !
2. ์์๊ฐ์ด ์๋ ์ด๊ฑฐํ (rawValue)
enum Grade : Int {
case zero // 0
case first // 1
case second // 2
}
let yourGrade = Grade.second.rawValue
print("yourGrade : \(yourGrade)")
์ด๊ฑฐํ์ด ๊ฐ์ ๊ฐ์ง ์ ์์ ! first ๋ 1 , second๋ 2
.rawValue๋ก enum์ด ๊ฐ์ง ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค
rawValue๊ฐ ๋ ์ ์๋ ์๋ฃํ์ 3๊ฐ์ง ! enum ์ ์ธ ์ ์ด๋ฆ ์์ Type์ ๊ผญ ๋ช ์ํด์ฃผ์
- Number Type
- Character Type
- String Type
์์ ์์์ ๊ฐ์ด Int๋ผ๋ ํ์ ์ enum ์ ์ธ ์ ์ด๋ฆ ์์ ๋ช ์ํด์ฃผ๋ฉด, ๊ฐ์ฅ ๋จผ์ ์ ์ธ๋ case ๋ถํฐ 0๋ถํฐ 1์ฉ ์ฆ๊ฐ๋ ๊ฐ์ด ๋ค์ด๊ฐ๋๋ค !
enum Grade : Int {
case first = 1
case second = 2
}
์ง์ rawValue๋ฅผ ์ง์ ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค !
rawValue๊ฐ ์๋ case๋ ๋ฐ๋ก ์ด์ ์ case์ rawValue์ +1 ํ ๊ฐ์ผ๋ก ์ ํ
enum Grade : Double {
case first = 1.0
// case second = 2.0 ๋
ธ๋
ธ
case second = 2
case third // 3์ผ๋ก ์
ํ
๋๊ณ Double๋ก ํ๋ณํ๋์ด ๋ค์ด๊ฐ !
}
๐ Intํ์ด ์๋ ์๋ฃํ์ผ๋ก ํ์ ๊ฒฝ์ฐ์, ๋ชจ๋ case์ ๋ํด ๊ฐ์ ์ง์ ํด์ฃผ๋ ๊ฒ์ด ์๋๋ฉด ์๋ฌ ๋ฐ์ !
์ปดํ์ผ๋ฌ๊ฐ Raw Value ๊ฐ์ ์ง์ ํ ๋ ์ ์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ์ค์ ๊ฐ์๋ ๋ชป ๋ํ๋ค๋ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค !
Raw Value๋ฅผ ์๋ตํ๊ณ ์ถ๋ค๋ฉด, ๋ฐ๋ก ์ด์ case์ Raw Value๋ฅผ ์ ์ ๊ฐ์ผ๋ก ํด์ฃผ์ด์ผ ํ๋ค
- ๊ฐ์ ๋งฅ๋ฝ์ผ๋ก, Character Type์ผ๋ก ์ด๊ฑฐํ์ ์ ์ธํ ๊ฒฝ์ฐ ๋ชจ๋ case์ ๋ํ Raw Value๋ฅผ ์ง์ ์ ์ธํด์ค์ผํ๋ค !
- String์ Character์ ๋ฌ๋ฆฌ Raw Value๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด, case ์ด๋ฆ๊ณผ ๋์ผํ Raw Value๊ฐ ์๋์ผ๋ก ๋ง๋ค์ด์ง๋ค.
๐ Raw Value๊ฐ ์๋ ์ด๊ฑฐํ์ ๊ฒฝ์ฐ, rawValue๋ก ์ด๊ฑฐํ ์์ฑ ๊ฐ๋ฅ
- ์๋ Raw Value์ผ ๊ฒฝ์ฐ nil ๋ฆฌํด
var school = SchoolWithRawValue.init(rawValue: "high")
ํ์ง๋ง ...
์์ ๊ฐ์ด RawValue๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ,
๋ชจ๋ case๊ฐ ๋์ผํ ํ์์ผ๋ก Raw Value๋ฅผ ๊ฐ์ ธ์ผ ํ๊ณ case ๋ณ ๊ฐ์ ๋ฏธ๋ฆฌ ์ง์ ๋ ํ ๊ฐ์ง ๊ฐ๋ง ๊ฐ์ง ์ ์์
๐ Associated Values(์ฐ๊ด๊ฐ)
- ํํ์ ํ์ฉํด์, ๋ด๊ฐ ์ํ๋ ์ฐ๊ด๊ฐ์ ๋ฐ์ ์ ์๊ฒ ์ ์ธํด์ค ์ ์๋๋ฐ์ !
- SchoolDetail์ด๋ผ๋ enum์ ๋ง๋ค๊ณ ๊ฐ ํ๊ต์ ์ด๋ฆ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ์ ์์ต๋๋ค
- ์ด๊ฑฐํ ์์ฑ ์ ๋ด๊ฐ ๋ง๋ค์ด๋ case๊ฐ ์ฐ๊ด๊ฐ์ด ํจ๊ป ๋จ๊ณ , ์ด๊ฑฐํ์ ์ง์ ๊ฐ์ ์ง์ ํด์ ์ฌ์ฉํ ์ ์์ต๋๋ค
- switch๋ฌธ๊ณผ ๋งค์นญ ์์ผ์ ์ฌ์ฉ๊ฐ๋ฅ (๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์์)
enum SchoolDetail {
case elementary(name: String)
case middle(name: String)
case high(name: String)
func getName() -> String {
switch self {
case .elementary(let name):
return name
case let .middle(name):
return name
case .high(let name):
return name
}
}
}
let yourMiddleSchoolName = SchoolDetail.middle(name: "์ ๋๋ฆฌ์คํ๊ต")
print("yourMiddleSchoolName: \(yourMiddleSchoolName.getName())")
+ ์ถ๊ฐ์ ์ผ๋ก Class, Struct์ ๋ง์ฐฌ๊ฐ์ง๋ก, Enum์์๋ ํ๋กํ ์ฝ์ ์ฑํํ ์ ์๋ค
CaseIterable์ฒ๋ผ ๋ด๊ฐ ์ํ๋ ํ๋กํ ์ฝ์ ์ฑํํ ์ ์๊ณ , ํด๋น ํ๋กํ ์ฝ์ ์ง์ ๋ allCases ์ฌ์ฉ๊ฐ๋ฅ !
+ ๊ธฐํ ์์๋ค !
// ์ถ๊ฐ์ ์ผ๋ก ์ฐพ์๋ณธ ์์๋ค
enum AppleProduct {
case iPad(model: String)
case iPhone(model: String, storage: Int)
case macbook(model: String, storage: Int, size: Int)
}
let product: AppleProduct = .iPhone(model: "8", storage: 64)
// ์ฐ๊ด๊ฐ์ ๊ฐ์ง๋ ์ด๊ฑฐํ์ switch ๋งค์นญ
switch product {
case .iPad("5s"): break // ์ฐ๊ด๊ฐ์ด 5s๋ฉด ๋งค์นญ
case .iPad: break // ์ฐ๊ด๊ฐ ๋ฌด์
case .iPhone("X",_): break // ์ฐ๊ด๊ฐ ์๋ต ๊ฐ๋ฅ
case .iPhone(let model,var storage): break // ์ฐ๊ด๊ฐ ์์(๋ณ์) ๋ฐ์ธ๋ฉ
case let .macbook(model, storage, size): break // ๋ชจ๋ ์ฐ๊ด๊ฐ์ let์ผ๋ก ๋ฐ์ธ๋ฉ ์ let์ ๋งจ ์์ผ๋ก ๋บผ ์ ์์
}
// ์ฐ๊ด๊ฐ์ ๊ฐ์ง๋ ์ด๊ฑฐํ์ if ์ฌ์ฉ๋ฒ
if case let .iPhone("8", storage) = product {
// product์ ์ฒซ๋ฒ์งธ ์ฐ๊ด๊ฐ์ด "8" ์ด๋ฉด ๋งค์นญ
print(storage)
}
if case .iPhone(_,64) = product {
// product์ ์ฒซ๋ฒ์งธ ์ฐ๊ด๊ฐ์ ์๊ด์๊ณ , ๋๋ฒ์งธ ์ฐ๊ด๊ฐ์ด 64๋ฉด ๋งค์นญ
print("iPhone 64GB")
}
// ํ๋กํ ์ฝ์ ์ฑํํ๋ ์ด๊ฑฐํ
enum AppleProduct2: String, CaseIterable {
case iPad = "5, 128"
case iPhone = "6, 64"
case macbook = "Pro, 256"
}
AppleProduct2.allCases.randomElement()
์ฐธ๊ณ ํ ์ฌ์ดํธ !
'Language > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Swift ) @discardableResult ๋? (4) | 2022.02.08 |
---|---|
Swift ) ๊ธฐ์ด ๋ฌธ๋ฒ 5์ผ์ฐจ - UnWrap ์ต์ ๋ ๋ณ์ (0) | 2022.02.07 |
Swift ) ๊ธฐ์ด ๋ฌธ๋ฒ 4์ผ์ฐจ - For ๋ฐ๋ณต๋ฌธ & Wildcard Pattern (0) | 2022.02.07 |
Swift ) ๊ธฐ์ด ๋ฌธ๋ฒ 2์ผ์ฐจ - foreach ๋ฐ๋ณต๋ฌธ (5) | 2022.02.04 |
Swift ) ๊ธฐ์ด ๋ฌธ๋ฒ 1์ผ์ฐจ - ์กฐ๊ฑด๋ฌธ (2) | 2022.02.04 |