print("I don't know what day is it, just keep learning!")
enum CompassPoint {
case north
case south
case east
case west
}
enum CompassPointNew {
case north, south, east, west
}
// enum harus dimulai dengan PascalCase (huruf kapital)
var northCompass = CompassPoint.north
northCompass = .east // mengganti dengan nilai lain yang ada pada CompassPoint
switch northCompass {
case .north:
print("Loth 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")
default:
print("You're at the center of the world")
}
enum Planet {
case merkurius, venus, bumi, mars, jupiter, saturnus
}
var myPlace = Planet.merkurius
switch myPlace {
case .bumi:
print("Tempat aman bagi manusia")
default:
print("Not a safe place to stay!")
}
enum Beverage: CaseIterable {
case coffee, tea, juice, milk
}
let totalBeverage = Beverage.allCases.count // mengaktifkan CaseIterable, memungkinkan untuk memperhatikan semua kasus
print("\(totalBeverage) beverages yang ada")
for cases in Beverage.allCases {
print(cases)
}
enum Barcode {
case upc(Int, Int, Int, Int)
case qrCode(String)
}
var product = Barcode.upc(100,20,49,71)
product = qrCode("Dicoding Indonesia")
switch product {
case .upc(let a, let b, let c, let d):
print("UPC: \(a), \(b), \(c), \(d)")
case qrcode(let stringCode):
print("QRCode: \(stringCode)")
}
// bisa juga dengan menempatkan annotation var atau let tunggal sbb:
switch product {
case let .upc(a, b, c, d):
print("UPC: \(a), \(b), \(c), \(d)")
case let .qrcode(stringCode):
print("QRCode: \(stringCode)")
}
// kita juga bisa mengisi enum dengan nilai default atau raw values
enum characterASCII: Character {
case tab = "\t"
case newLine = "\n"
case returnCarriage = "\r"
}
enum Planet: Int {
case merkurius = 1, venus, bumi, mars, jupiter, saturnus, uranus, neptunus
}
case CompassPoint: String {
case north, east, west, south
}
// mengakses nilai raw values
let nomorBumi = Planet.bumi.rawValue
let sunset = CompassPoint.west.rawValue
// mengakses dari nilai raw values
let somePlanet = Planet(rawValue: 4)
print("\(somePlanet)")
let posisi = 11
if let cariPlanet = Planet(rawValue: posisi) {
switch cariPlanet {
case .earth:
print("bisa ditinggali")
default:
print("Not a safe place!")
}
} else {
print("Tidak ada planet dalam tata surya kita di urutan ke: \(posisi)")
}
// menambahkan lapisan ke dalam enum dengan indirect dapat dilakukan dengan 2 cara:
enum ArithmeticExpression {
case number(Int)
indirect case addition(arithmeticExpression, arithmeticExpression)
indirect case mutiplication(arithmeticExpression, arithmeticExpression)
}
// dan cara lain:
indirect enum ArithmeticExpression {
case number(Int)
case addition(arithmeticExpression, arithmeticExpression)
case mutiplication(arithmeticExpression, arithmeticExpression)
}
/* yang pertama kita hanya memilih beberapa cases saja, yang ke-2
kita definisikan untuk semua nilai!*/
// contoh: menuliskan (5+4)*2 ke dalam enum yang sudah kita buat
let five = ArithmeticExpression.number(5)
let four = ArithmeticExpression.number(4)
let sumNumber = 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))