티스토리 뷰
출처
열거형 (Enumerations)
문법
enum CompassPoint {
case north
case south
case east
case west
}
Objective C 와 다르게 Swift 는 생성될 때 기본으로 정수형 값을 할당하지 않는다.
위 예제에서도 0, 1, 2, 3 이 아니다.
아래처럼 한줄로도 표현할 수 있다.
enum Planet {
case mercury, venus, earth, mars,
jupiter, saturn, uranus, neptune
}
사용시에는 짧은 ( . ) 문법을 사용한다.
var direction : CompassPoint
direction = .north
Switch 구문과 함께 쓰기
var direction : CompassPoint
direction = .south
switch direction {
case .north:
print("Lots of planets have a north")
case .south:
print("Watch out for penguins")
case .east:
print("Where the sun rises")
case .west:
print("Where the skies are blue")
}
열거형의 case 를 구성할 때, switch 구문은 완벽해야한다.
즉, 열거형의 경우 모든 케이스의 경우가 없다면
default 구문이 강제된다.
연관된 값 (Associate Values)
enum Barcode {
case upc(Int, Int, Int, Int)
case qrCode(String)
}
var product = Barcode.upc(8, 85909, 51226, 3)
product = .qrCode("ABCDEFG")
switch product {
case .upc(let numberSystem, let manufacturer, let product, let check):
print("UPC: \(numberSystem), \(manufacturer), \(product), \(check).")
case .qrCode(let productCode):
print("QR code: \(productCode).")
}
var 또는 let 을 case 뒤에 바로 두어 모든 parameter 에 있는
let 을 생략할 수 있다.
switch product {
case let .upc(numberSystem, manufacturer, product, check):
print("UPC: \(numberSystem), \(manufacturer), \(product), \(check).")
case let .qrCode(productCode):
print("QR code: \(productCode).")
}
원시 값 (Raw Values)
enum ASCIIControlCharacter: Character {
case tab = "\t"
case lineFeed = "\n"
case carriageReturn = "\r"
}
암시적인 원시값 할당
enum Planet: Int {
case mercury = 1, venus, earth, mars,
jupiter, saturn, uranus, neptune
}
print(Planet.venus.rawValue)
enum CompassPoint: String {
case north, south, east, west
}
print (CompassPoint.north.rawValue)
원시 값으로 초기화
let planet = Planet(rawValue: 2)
print(planet!)
let positionToFind = 11
if let somePlanet = Planet(rawValue: positionToFind) {
switch somePlanet {
case .earth:
print("Mostly harmless")
default: print("Not a safe place for humans")
}
} else {
print("There isn't a planet at position \(positionToFind)")
}
재귀 열거형 (Recursive Enumerations)
enum ArithmeticExpression {
case number(Int)
indirect case addition(ArithmeticExpression, ArithmeticExpression)
indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}
필요한 경우 모든 열거형 case 에 대해 간접적으로 사용하기 위해
열거형을 시작하기 전에 indirect 를 사용할 수도 있다.
indirect enum ArithmeticExpression {
case number(Int)
case addition(ArithmeticExpression, ArithmeticExpression)
case multiplication(ArithmeticExpression, ArithmeticExpression)
}
( 5 + 4 ) * 2 를 재귀 열거형 표현식으로 구현해보면 아래와 같다.
let five = ArithmeticExpression.number(5)
let four = ArithmeticExpression.number(4)
let sum = ArithmeticExpression.addition(five, four)
let product = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2))
func evaluate(_ expression: ArithmeticExpression) -> Int {
switch expression {
case let .number(value):
return value
case let .addition(left, right):
return evaluate(left) + evaluate(right)
case let .multiplication(left, right):
return evaluate(left) * evaluate(right) }
}
print(evaluate(product))
// Prints "18"
'iOS 개발 > Swift' 카테고리의 다른 글
[Swift 3] 프로퍼티 (Property) (0) | 2017.04.15 |
---|---|
[Swift 3] 클래스와 구조체 (1) | 2017.04.14 |
[Swift 3] 클로저 (Closures) (0) | 2017.04.14 |
[Swift 3] 함수 정의와 호출 및 함수 타입 (Function) (1) | 2017.04.14 |
[Swift 3] 흐름 제어 (Flow Control / for, while, if-else, switch, fallthrough, guard, label, available) (0) | 2017.04.13 |
- Total
- Today
- Yesterday
- string
- 꺼내먹어요
- ios
- NSManagedObjectContext
- thread
- applicationWillResignActive
- RunLoop
- optional
- delegate
- CIImage
- CGImage
- dictionary
- Swift
- Swfit
- Swift 3
- AWS
- NSManagedObject
- Arc
- workerThread
- HTTP
- NSManagedObjectModel
- Block
- Swift 3.0
- coredata
- docker
- set
- Swift3
- EffectiveObjectiveC
- 읽기 좋은 코드가 좋은 코드다
- UIView
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |