๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[Swift] ์—ด๊ฑฐํ˜• (Enumerations)

by hyebin (Helia) 2022. 2. 8.
๋ฐ˜์‘ํ˜•

์—ด๊ฑฐํ˜•

  • ๊ด€๋ จ๋œ ๊ฐ’์œผ๋กœ
  • case๊ฐ’์œผ๋กœ string, character, integer, floting ๊ฐ’๋“ค์„ ์‚ฌ์šฉ
  • ๊ณ„์‚ฐ๋œ ํ”„๋กœํผํ‹ฐ(computed properties)๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ์ดˆ๊ธฐํ™”๋ฅผ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, ์ดˆ๊ธฐ ์„ ์–ธ์„ ํ™•์žฅํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ

์—ด๊ฑฐํ˜• ๋ฌธ๋ฒ•

  • ์›์‹œ ๊ฐ’(Raw Values)์ด ์—†๋Š” ์—ด๊ฑฐํ˜•
enum CompassPoint {
    case north
    case south
    case east
    case west
}

//์ฝค๋งˆ(,)๋ฅผ ๊ตฌ๋ถ„ํ•ด ํ•œ์ค„๋กœ ์ •์˜
enum CompassPoint {
    case north, south, east, west
}

var directionToHead = CompassPoint.west
var directionToHead: CompassPoint = .west

 /*CompassPoint๋กœ ํ•œ๋ฒˆ ์ •์˜๋˜๋ฉด ๋‹ค์Œ์— ๊ฐ’์„ ํ• ๋‹นํ•  ๋•Œ ํ˜•์„ ์ƒ๋žตํ•œ 
 ์  ๋ฌธ๋ฒ•(dot syntax)์„ ์ด์šฉํ•ด ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ์ถ•์•ฝํ˜• ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ*/
directionToHead = .east
  • ์›์‹œ ๊ฐ’(Raw Values)์ด ์žˆ๋Š” ์—ด๊ฑฐํ˜•
    • Number type
//enum ์„ ์–ธ ์‹œ ํƒ€์ž…์„ ๋ช…์‹œํ•˜๋ฉด ์ฒซ case๋ถ€ํ„ฐ 0๋ถ€ํ„ฐ 1์”ฉ ์ฆ๊ฐ€๋œ ๊ฐ’์œผ๋กœ ์„ ์–ธ๋จ
enum Position: Int{
    case top		//0
    case right		//1
    case bottom		//2
    case left    	//3
}

//์›์‹œ๊ฐ’ ์ง์ ‘ ์ง€์ •, ์›์‹œ๊ฐ’์ด ์—†๋Š” case๋Š” ์ด์ „ case์˜ ์›์‹œ๊ฐ’์—์„œ 1 ์ฆ๊ฐ€๋œ ๊ฐ’์œผ๋กœ ์„ ์–ธ๋จ
enum Position: Int{
    case top = 1
    case right = 10
    case bottom    	//11
    case left = 20
}

//Double, Floatํƒ€์ž…์œผ๋กœ ์„ ์–ธ ์‹œ ์›์‹œ๊ฐ’์„ ์ƒ๋žตํ•˜๋ ค๋ฉด ์ด์ „ case์— ์ •์ˆ˜ ์ž…๋ ฅํ•ด์•ผ ํ•จ
enum Position: Double{
    case top = 1.0		//1.0
    case right = 10.1	//10.1
    case bottom = 2		//2.0
    case left			//3.0
}
  • Charater type
//๋ชจ๋“  case์— ๋Œ€ํ•œ ์›์‹œ๊ฐ’์„ ์ง์ ‘ ์„ ์–ธํ•ด ์ฃผ์–ด์•ผ ํ•จ
enum Position: Character{
    case top = "t"
    case right = "r"
    case bottom = "b"
    case left = "l"
}
  • String type
//์›์‹œ๊ฐ’์„ ์ƒ๋žตํ•œ ๊ฒฝ์šฐ case ์ด๋ฆ„์ด ์›์‹œ๊ฐ’์œผ๋กœ ์ƒ์„ฑ๋จ
enum Position: String{
    case top = "t"	//t
    case right		//right
    case bottom		//buttom
    case left = "l"	//l
}
  • ์›์‹œ ๊ฐ’์— ์ ‘๊ทผ
print(Position.right.rawValue)	//right

//Raw Value๋ฅผ ํ†ตํ•ด์„œ ์—ด๊ฑฐํ˜•์„ ์ƒ์„ฑ
var user = Position.init(rawValue: "l") //์˜ต์…”๋„ ํƒ€์ž…โ€‹

๊ด€๋ จ ๊ฐ’ (Associated Values)

  • case์— custom type์˜ ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ €์žฅ
  • ๊ฐ™์€ ํ˜•์ด์ง€๋งŒ, ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ๊ฐ’์„ ๊ฐ–๋Š” case๋ฅผ ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • case์˜†์— tuple ํ˜•ํƒœ๋กœ type์„ ๋ช…์‹œ
//Named Tuple
enum Product{
    case smartphone(model: String, storage: Int)
    case computer(model: String, size: Int)
    case pad (model: String)
}

var produt: Product = .smartphone(model: "iphone", storage: 256)

//Unnamed Tuple
enum Product{
    case smartphone(String, Int)
    case computer(String, Int)
    case pad (String)
}

var product = Product.smartphone("iphone", 256)
  • switch-case๋ฌธ์—์„œ ํ™œ์šฉ
switch product{
case .pad("ipad"): break    //์—ฐ๊ด€๊ฐ’์ด ipad์ด๋ฉด ๋งค์นญ
case .pad: break            //์—ฐ๊ด€๊ฐ’ ๋ฌด์‹œ
case .smartphone("iphone", _): break //์—ฐ๊ด€๊ฐ’ ์ƒ๋žต ๊ฐ€๋Šฅ
case .smartphone(let model, let storage): break //์—ฐ๊ด€๊ฐ’ ์ƒ์ˆ˜(๋ณ€์ˆ˜) ๋ฐ”์ธ๋”ฉ
case let .computer(model, size): break  //๋ชจ๋“  ์—ฐ๊ด€๊ฐ’์„ ์ƒ์ˆ˜๋กœ ๋ฐ”์ธ๋”ฉ ์‹œ let์„ ๋งจ ์•ž์œผ๋กœ ๋บ„ ์ˆ˜ ์žˆ์Œ
}
๋ฐ˜์‘ํ˜•

'โŒจ๏ธ Language > swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Swift] Codility Lesson2 - CyclicRotation  (0) 2022.07.23
[Swift] Codility Lesson1 - BinaryGap  (0) 2022.07.23
[Swift] ํ•จ์ˆ˜(Functions)  (0) 2021.12.02
[Swift] ์ œ์–ด๋ฌธ(Control Flow)  (0) 2021.11.26
[Swift] ๋ฐ์ดํ„ฐ ํƒ€์ž…(2)  (0) 2021.11.25