-
[Swift] Enumeration μ΄μ 리iOS/π Swift 2021. 3. 10. 12:16
- 1μ°¨ μμ (2021.03.29)
- 2μ°¨ μμ (2021.05.07)
μ΄κ±°νμ 곡μλ¬Έμλ₯Ό ν΅ν΄ μ 리λ₯Ό νκ³ μ¬λ¬ λ² λ³΅μ΅νλ©΄μ λμΉ λ΄μ©μ΄λ μλ‘ κΉ¨λ«κ² λ μ μ κΈλ‘ λ¨κΉλλ€. ππ»
μλ£: Enumerations
κΈ°λ³Έ Syntax
enum Direction { case north, south, east, west } // νΉμ enum Direction { case north case south case east case west }
μ΄κ±°νμ μ μΈνλ κ²μ μλ‘μ΄ μ»€μ€ν νμ μ λ§λλ κ²μ΄κ³ , κ·Έ νμ μ΄ κ°μ§ μ μλ κ°λ€μ μ μνλ κ²μ λλ€.
μ μ½λμ λ°λ₯΄λ©΄ Direction νμ μ north, south, east, west λΌλ κ°λ§ κ°μ§ μ μμ΅λλ€.
λ€λ₯Έ κ°μ μ¬μ©νλ €κ³ νλ©΄ μ»΄νμΌ μλ¬μ λλ€.
κ·Έλ λ€λ©΄ μΈμ μ΄κ±°νμ μ¬μ©ν κΉμ?
ν κ°μ§ μλ‘ μ€νΈλ§ 리ν°λ΄ λμ λμ μ΄κ±°νμ μ¬μ©νμ¬ switch λ¬Έμ caseλ₯Ό 맀μΉμν€λ©΄, λ³΄λ€ μμ ν μ½λκ° λ©λλ€.
μ€νΈλ§μ κ·Έλλ‘ μ¬μ©ν λ λ°μν μ μλ μ€νλ₯Ό λ°©μ§ν μ μκΈ° λλ¬Έμ λλ€.
λν Error νμ μ μ μν λλ μ΄κ±°νμ μ£Όλ‘ μ¬μ©ν©λλ€.
λ€λ₯Έ μΈμ΄μλ λ€λ₯Έ Swift μ΄κ±°νμ νΉμ§
var whertToGo = Direction.north switch wherToGo { case .north: print("Go to the North") default: print("Have no idea") } //C μΈμ΄ μμλ μ μ κ°μΌλ‘λ switch λ¬Έμμ λΆκΈ°ν μ μμ΅λλ€. switch (whereToGo) { case 0: ... }
κΈ°λ³Έ Syntax λ‘ μ΄κ±°νκ³Ό caseλ₯Ό μ μΈνμμ λ, caseλ κ·Έ μ체 κ°λ§μ κ°μ§κ³ , κ·Έ μΈμ λ°λ‘ λ€λ₯Έ κ°μ κ°μ§μ§ μμ΅λλ€.
λ°λ‘ λ€λ₯Έ κ°μ κ°μ§ λ€λ μλ―Έλ, CμΈμ΄λ₯Ό μλ‘ λ€λ©΄ CμΈμ΄μμλ 첫 λ²μ§Έ case λ₯Ό κ·Έ μ체 μΈμ 0μ΄λΌλ κ°μΌλ‘ λ체ν΄μ μ¬μ©ν μλ μμ΅λλ€.
λ€λ₯Έ κ°μ κ°μ§κ² νλ €λ©΄ μλμμ μ€λͺ νλ Associated Value λ Raw Value λ₯Ό μ μΈν΄μΌ ν©λλ€.
// λ³μ νΉμ μμκ° νμ μ μ΄λ―Έ μλ κ²½μ°μλ μ΄κ±°ν μ΄λ¦μ μλ΅ν μ μμ΅λλ€. whereToGo = .east var myWay: Direction = .west
λν λ³μλ μμμ νμ μ μΆλ‘ ν μ μλ€λ©΄ μ΄κ±°νμ νμ λͺ μ μλ΅ν μ μμ΅λλ€.
Associated Value
enum Barcode: Equatable { case upc(Int, Int, Int, Int) case qrCode(String) } var productBarcode = Barcode.upc(8, 85909, 51226, 3) productBarcode = .qrCode("ABCDE")
"Additional information alongside case values" - Swift.org
μ°κ΄ κ°μ case κ° κ°μ§λ μΆκ°μ μΈ μ 보μ λλ€.
case μ μΆκ°μ μΈ μ 보λ€μ κ°μ΄ μ μ₯νκ³ μΆμ κ²½μ°μ μ μΈν©λλ€.
κ·Έλ¦¬κ³ μ°κ΄ κ°μ κ²½μ° caseκ° κ°μ λΉκ΅λ Equatable νλ‘ν μ½μ μ±νν΄μΌ κ°λ₯ν©λλ€.
productBarcode = .upc(8, 85909, 51226, 3) var newProductBarcode = Barcode.upc(9, 34782, 13583, 1)
κ·Έλ¦¬κ³ κ°μ caseλΌλ λ€λ₯Έ κ°μ κ°μ§κ³ μμ μ μμ΅λλ€.
μμ λ λ³μ productBarcode μ newProductBarcode λ λ λ€ Barcode μ΄κ±°ν νμ μ upc μΌμ΄μ€ μ΄μ§λ§, Associated Value κ° λ€λ₯΄λ―λ‘ λ€λ₯Έ κ°μ΄ λ©λλ€.
μ°κ΄κ°μ μ κ·Όμ λ³΄ν΅ μλμ κ°μ΄ switch μμ κ°μ λ°μΈλ©νμ¬ μ κ·Όν©λλ€.
enum myCase { case numbers(Int, Int) } var value = myCase.numbers(3, 1) switch value { case let .numbers(test1, test2): // λ³μ value μ μ°κ΄κ° 3μ μμ test1μ λ°μΈλ© νλ μ½λ ... case .numbers(let test1, var test2): // test1 μ μμλ‘ λ°μΈλ©νκ³ , test2 λ λ³μλ‘ λ°μΈλ© νλ μ½λ ... case .nubmers(_, var test2): // 첫λ²μ§Έ μ°κ΄κ°μ μμΌλμΉ΄λ ν¨ν΄μΌλ‘ λ°μΈλ© μλ΅νμλ€. ... }
Raw Value
enum Number: Int { // ν€λ λΆλΆμ μ μΈν RawValue μ νμ μ κΈ°μ¬ν©λλ€. case one = 1 case two = 2 case three = 3 } var myNumber = Number(rawValue: 1) // rawValue μμ±μΌλ‘ μ κ·Ό κ°λ₯ print( myNumber.rawValue ) // λ€μμ κ²°κ³Όλ? myNumber = Number(rawValue: 100)
"Prepopulated value"
Raw Valueλ 미리 μ±μμ Έ μλ κ°μΌλ‘ λͺ μμ μΌλ‘ μ μΈ μμ κ·Έ κ°μ΄ κ²°μ λ©λλ€.
μ μ½λμμ case one, two, three λ κ°κ° 1, 2,3 μ΄λΌλ Raw Value λ₯Ό κ°μ§κ³ μμ΅λλ€.
case μ Raw Value λ .rawValue μμ±μΌλ‘ μ κ·Όν©λλ€.
κ·Έλ°λ° μ§μ μ μΈνμ§ μμλ RawValue κ° μλμΌλ‘ μ±μμ§λ λ κ°μ§ κ²½μ°κ° μμ΅λλ€.
>>> Raw Value <<< μ΄ κΈμ μ°Έκ³ ν΄μ£ΌμΈμ!!!π
Method μ μΈμ΄ κ°λ₯νλ€
μ΄κ±°νλ μΈμ€ν΄μ€ λ©μλμ νμ λ©μλμ μ μΈμ΄ κ°λ₯ν©λλ€.
enum Direction { case north, south, east, west func instance() { print("Instance Method") } static func type() { print("Type Method") } } Direction.north.instance() // "Instance Method" // Direction.north.type() -> Compile Error Direction.type() // "Type Method"
CaseIterable
κ΄λ ¨ κΈμ λ°λ‘ μ 리νμμ΅λλ€.
Recursive Enumeration
'indirect' ν€μλλ₯Ό μμ λΆμ΄λ©΄, μ΄κ±°νμ κ°μ§λ case λ₯Ό λ§λ€ μ μμ΅λλ€.
μμΈν λ΄μ©μ μ¬μ©ν κ²½μ°κ° μμ λ λ€μ νλ² μ 리νκ² μ΅λλ€.
λ!
π€π’[μ°μ§±μ iOS λΈλ‘κ·Έ]π΅π»
iOSλ₯Ό 곡λΆνλ©΄μ λ°°μ΄ λ΄μ©μ κΈ°λ‘νκ³ μμ΅λλ€.'iOS > π Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] μ°μ°μ ꡬν (Implementing Operator Methods) (0) 2021.03.18 [Swift] Dictionary κ°λ¨ μ 리 (0) 2021.03.16 [Swift] - Autoclosuresλ? (0) 2021.03.02 [Swift] - Subscripts (μλΈμ€ν¬λ¦½νΈ) (0) 2021.02.19 Access Control (μ κ·Ό μ μ΄) (0) 2021.02.17