[Swift🦩] #8列挙型
1. Enum ⭐️⭐️
グループの複数のインスタンスを表します.
enum CompassPoint {
case north
case south
case east
case west
}
によって区別することができます.enum Planet {
case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}
// 새로운 값을 정의할 때 이용할 수 있고,
var directionToHead = CompassPoint.west
label.textColor = UIColor.white
// 타입 유추가 가능하면 .만 찍어도 된다.
directionToHead = .east
2. Switch
switch文を使用してenumハウジングに従って処理できます.
switch文はすべての状況を考慮する必要があるため、すべての状況を考慮する必要がない場合はdefaultを使用して処理します.
directionToHead = .south
switch directionToHead {
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")
}
// Prints "Watch out for penguins"
3. Iterating Cases
CaseIterableに従い、enumをIterableにすることができます.
使用時、Case.allcaseとして...count/文用...などのIterableオブジェクトに適用されます.
enum Beverage: CaseIterable {
case coffee, tea, juice
}
let numberOfChoices = Beverage.allCases.count
print("\(numberOfChoices) beverages available")
// Prints "3 beverages available"
4. Associated Values
enum Size {
case large
case small
}
enum Menu {
case hamburger(String)
case fries(String, Size)
case beverage(String, Size)
}
スイッチドアとして使用できます.var order = Menu.fries("cheese", .large)
switch order {
case .hamburger(let patties): // 연관 값을 꺼내 쓸 수 있다.
print("\(patties) 햄버거 입니다.")
case .fries(let source, let size):
print("\(source) 감자튀김 \(size) 사이즈 입니다.")
case let .beverage(kind, size): // 전부 let 으로 쓸거면 이렇게.
print("\(kind) \(size) 사이즈 입니다.")
}
5. Raw Values
各enumボックスには値があります.
逆に、各エンクロージャは同じタイプの値で充填する必要があります.
enum ASCIIControlCharacter: Character {
case tab = "\t"
case lineFeed = "\n"
case carriageReturn = "\r"
}
// Int 의 경우 첫번째 값을 채우면 다음에는 2 3 4 ... 로 알아서 채워진다.
enum Planet: Int {
case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
}
// String 의 경우 특별히 지정하지 않으면, 케이스 이름이 raw value.
enum CompassPoint: String {
case north, south, east, west
}
let planetNum = Planet.earth.rawValue // rawValue 로 접근할 수 있다.
let possiblePlanet = Planet(rawValue: 7) // 반대로 원시값을 이용해서 원래 케이스에 접근할 수 있다.
6. Recursive Enum
Enumは、関連付け値を独自のタイプenumとします.
enum ArithmeticExpression {
case number(Int)
// number + number
indirect case addition(ArithmeticExpression, ArithmeticExpression)
// number * number
indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}
// indirect 키워드를 앞으로 빼서 쓸 수도 있음.
indirect enum ArithmeticExpression {
case number(Int)
case addition(ArithmeticExpression, ArithmeticExpression)
case multiplication(ArithmeticExpression, ArithmeticExpression)
}
この例では、計算に使用するケースを別途作成する必要があります.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"
実際の使用
enum Status {
case login
case signup
}
let status = Status.login
var urlString = ""
switch status {
case .login:
url = "https://localhost:8080/user/login"
case .signup:
url = "https://localhost:8080/user/signup"
}
リファレンスhttps://bbiguduk.gitbook.io/swift/language-guide-1/enumerations
Reference
この問題について([Swift🦩] #8列挙型), 我々は、より多くの情報をここで見つけました https://velog.io/@ddosang/Swift-8-열거형テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol