스위프트 공식문서를 참조하였습니다.
열거형 문법
import UIKit enum Compass { case North, South, East, West } var direction : Compass = .South switch direction { case .East: print("east") case .West: print("west") case .South: print("South") case .North: print("North") } print(type(of: direction))
그냥 이런식으로 사용가능하다고 생각하자.
메소드에서도 사용가능
import UIKit enum Compass { case North, South, East, West func printDirection(){ switch self{ case .North, .South: print("남북") case .East, .West: print("동서") } } } Compass.South.printDirection() // south
열거형의 rawValue
위의경우에는 그냥 String으로 받앗지만 int형 등 다양한 자료형을 사용할수도 있다.
enum Numbers: Int{ case red = 1 case green = 2 case blue = 3 } print(Numbers.red) // 1 print(Numbers.green) //2 print(Numbers.blue.rawValue) // 3
그런데 이거를 입력을 안해주더라도 rawValue를 주게 된다. Int형이라면 01234 순으로 String이면 case이름과 동일하게 값이 주어진다.
enum의 사용 하는 방향에 대해서
위의 글에서는 단순히 이넘은 타입을 나눠준다고 생각을 했지만, 사실 이넘은 다양하게 사용하게 된다.
특히나 어떠한 케이스를 나누거나, static한 값을 하드 코딩할때 많이 사용하게 되는데;
class Model{ enum School { case t1, t2, t3, t3 var title: String{ case .t1: return "티원" case .t2: return "티투" case .t3: return "티쓰리" case .t3: return "티포" } } var words : School init(_ words: School){ self.words = .words } }
와 같은 방법으로 이넘을 작성했을때
class Model{ words : String init(_ words: String){ self.words = words } } //일때 let models: [Model] = [ Model("티원"), Model("티투"), Model("티쓰리"), ] //와 같은 하드코딩을 이넘을 통해 다음과 같이 해소할수 있게 된다. let models: [Model.School] = Model.School.allcase // models = [t1, t2, t3, t4] let models: [Model] = [ Model(.t1), Model(.t2), Model(.t3), ] //로 처리하게 된다.
Uploaded by
N2T