8-2. 関連値、元の値、再帰列挙
13430 ワード
関連値
enum Barcode {
case upc(Int, Int, Int, Int)
case qrCode(String)
}
//다음의 Barcode라는 열거형은 4자리의 튜플 타입과 연관된 값을 가진 upc나
//String타입의 연관된 값을 가지는 qrCode를 가질 수 있다.
//여기에서 정의는 어떠한 실질적 값을 제공하는 것이 아닌
//Barcode상수와 변수에 저장하는 연관된 값의 타입을 정의하는 것이다.
var productBarcode = Barcode.upc(8, 1, 2, 3)
productBarcode = .qrCode("AFDESA")
//다음과 같이 바코드 타입 할당이 가능하다.
switch productBarcode {
case .upc(let numberSystem, let manufacturer, let product, let check):
print(\(numberSystem))
//만약 여기가 호출되면 8일 출력된다.
case .qrCode(let productCode):
print("QR Code : \(productCode)")
//다음과 같은 경우 "AFDESA"이 값을 출력하게 된다.
//위에서 정의한 케이스가 가질 연관된 값의 타입을 받아서 그대로 변수나 상수에 담아서
//switch구문 내에서 활용이 가능하다.
switch productBarcode {
case let .upc(numberSystem, manufacturer, product, check):
print(\(numberSystem))
//만약 여기가 호출되면 8일 출력된다.
case let .qrCode(productCode):
print("QR Code : \(productCode)")
//비슷한 경우이며, 케이스에 할당된 값에 대해서 스위치 구문에서 사용이 가능하다.
元の値(元の値)
enum CodeController : String {
case A = "A",
Case B = "B"
}
//다음과 같이 원시값이 가질 타입을 열거형에 선언해주고 케이스에 할당해주면
//해당 값에 rawValue라는 프로퍼티를 통해 접근이 가능하다.
enum CompassPoint : String {
case north, south, east, west
}
//다음과 같을 때 .north의 원시값은 "north"로 암시적으로 소유되게 된다.
let sunsetDirection = CompassPoint.west.rawValue
//다음과 같이 원시값 프로퍼티를 통해서 값에 접근하고 초기화도 가능하다.
再帰列挙
enum ArithmeticExpression {
case number(Int)
indirect case addition(ArithmeticExpression, ArithmeticExpression)
indirect case multiplication(ArithmeticExpression, ArithmeticExpression)
}
//다음처럼 열거형 시작전 indirect를 작성하여 연관된 값을 가진 케이스에
//간접적으로 활성화가 가능하다.
let five = ArithmeticExpression.number(5)
let four = ArithmeticExpression.number(4)
let sum = ArithmeticExpression.addition(five, four)
let product = ArithmeticExpression.multiplication(sum, Arithmetic.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 .multipication(left, right):
return evaluate(left) * evaluate(right)
}
}
print(evaluate(product))
//18 을 출력한다.
Reference
この問題について(8-2. 関連値、元の値、再帰列挙), 我々は、より多くの情報をここで見つけました https://velog.io/@devleeky16498/8-2.-연관된-값-원시-값-재귀-열거형テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol