finish enumerations

This commit is contained in:
Gary Gan 2025-01-27 13:14:07 +08:00
parent 719c9426fa
commit c29359d48a
3 changed files with 191 additions and 0 deletions

View File

@ -0,0 +1,186 @@
import Foundation
enum Animals {
case cat
case dog
case rabbit
}
let cat = Animals.cat
cat
if cat == Animals.cat {
"This is a cat"
} else {
"This is something else"
}
switch cat {
case .cat:
"This is a cat"
break
case .dog:
"This is a dog"
break
case .rabbit:
"This is a rabbit"
break
}
enum Shortcut {
case fileOrFolder(path: URL, name: String)
case wwwUrl(path: URL)
case song(artist: String, songName: String)
}
let wwwApple = Shortcut.wwwUrl(path: URL(string: "https://apple.com")!)
switch wwwApple {
case .fileOrFolder(path: let path, name: let name):
path
name
case .wwwUrl(path: let path):
path
case .song(artist: let artist, songName: let songName):
artist
songName
}
switch wwwApple {
case .fileOrFolder(let path, let name):
path
name
case .wwwUrl(let path):
path
case .song(let artist, let songName):
artist
songName
}
switch wwwApple {
case let .fileOrFolder(path, name):
path
name
case let .wwwUrl(path):
path
case let .song(artist, songName):
artist
songName
}
if case let .wwwUrl(path) = wwwApple {
path
}
let withoutYou = Shortcut.song(artist: "Gary", songName: "X")
if case let .song(_, songName) = withoutYou {
songName
}
enum Vehicle {
case car(manufacturer: String, model: String)
case bike(manufacturer: String, yearMade: Int)
// func getManufacturer() -> String {
// switch self {
// case let .bike(manufacturer, _):
// return manufacturer
// case let .car(manufacturer, _):
// return manufacturer
// }
// }
// var manufacturer: String {
// switch self {
// case let .bike(manufacturer, _):
// return manufacturer
// case let .car(manufacturer, _):
// return manufacturer
// }
// }
var manufacturer: String {
switch self {
case let .bike(manufacturer, _), let .car(manufacturer, _):
return manufacturer
}
}
var manufacturer_foo: String {
switch self {
case let .bike(foo, _), let .car(_, foo):
return foo
}
}
}
let car = Vehicle.car(manufacturer: "Tesla", model: "X")
let bike = Vehicle.bike(manufacturer: "HD", yearMade: 2013)
car.manufacturer
bike.manufacturer
car.manufacturer_foo
bike.manufacturer_foo
enum FamilyMember: String {
case father = "Dad"
case mother = "Mom"
case brother = "Bro"
case sister = "Sis"
}
FamilyMember.brother.rawValue
enum FavouriteEmoji: String, CaseIterable {
case blush = "😊"
case rocket = "🚀"
case fire = "🔥"
}
FavouriteEmoji.allCases
FavouriteEmoji.allCases.map(\.rawValue)
FavouriteEmoji.blush.rawValue
FavouriteEmoji(rawValue: "😊")
enum Height {
case short, medium, long
mutating func makeLong() {
self = Height.long
}
}
var myHeight = Height.medium
myHeight.makeLong()
myHeight
indirect enum IntOperation {
case add(Int, Int)
case subtract(Int, Int)
case freehand(IntOperation)
func calculateResult(of operation: IntOperation? = nil) -> Int{
switch operation ?? self {
case let .add(lhs, rhs):
return lhs + rhs
case let .subtract(lhs, rhs):
return lhs - rhs
case let .freehand(operation):
return calculateResult(of: operation)
}
}
}
let freeHand = IntOperation.freehand(.add(4, 1))
freeHand.calculateResult()

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<playground version='7.0' target-platform='macos' swift-version='6' buildActiveScheme='true' executeOnSourceChanges='true' importAppTypes='true'/>

View File

@ -1,6 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Enumerations.playground">
</FileRef>
<FileRef
location = "group:Structures.playground">
</FileRef>