Skip to content

Instantly share code, notes, and snippets.

View SahilMutualMobile's full-sized avatar

Sahil Satralkar SahilMutualMobile

View GitHub Profile
//Usage
let happyMeal1: [any RestaurantItem] =
[PizzaType.margherita, SideDishType.fries, DrinkType.lemonade]
let happyMeal2: [any RestaurantItem] =
[PizzaType.farmhouse, SideDishType.calzone, DrinkType.soda]
let pizzaShop = PizzaShop()
pizzaShop.mealOrder(order: happyMeal1)
pizzaShop.mealOrder(order: happyMeal2)
pizzaShop.mealOrder(order: [SideDishType.calzone, DrinkType.lemonade])
class PizzaShop {
var orderNumber: Int = 1
func onePlusOneOffer(order: some RestaurantItem) {
print("Order #\(orderNumber) starting")
for _ in 0 ..< 2 {
print(order.acceptOrderItem())
print(order.prepareOrderItem())
}
enum DrinkType: String, RestaurantItem {
case soda = "Soda"
case lemonade = "Lemonade"
func acceptOrderItem() -> String {
"\(self.rawValue) drink in preparation"
}
func prepareOrderItem() -> String {
"\(self.rawValue) drink is ready!"
enum SideDishType: String, RestaurantItem {
case fries = "Fries"
case calzone = "Calzone"
func acceptOrderItem() -> String {
"\(self.rawValue) side dish in preparation"
}
func prepareOrderItem() -> String {
"\(self.rawValue) side dish is ready!"
enum PizzaType: String, RestaurantItem {
case margherita = "Margherita"
case farmhouse = "Farmhouse"
case goldenCorn = "Golden corn"
var toppings: [PizzaTopping] {
switch self {
case .margherita:
return [.lotsOfCheese]
protocol RestaurantItem {
associatedtype Message = String
func acceptOrderItem() -> Message
func prepareOrderItem() -> Message
}
import Foundation
enum PizzaTopping: String {
case onion = "Onion"
case capsicum = "Capsicum"
case corn = "Corn"
case cheese = "Cheese"
case lotsOfCheese = "Lots of cheese"
}
//Usage
//Pizza orders
var myOrder = PizzaShop()
myOrder.prepare(type: PizzaType.margherita)
var myOrder2 = PizzaShop()
myOrder2.prepare(type: PizzaType.farmhouse)
var myOrder3 = PizzaShop()
myOrder3.prepare(type: PizzaType.goldenCorn)
//Side dish orders
var myOrder4 = PizzaShop()
class PizzaShop {
func prepare<T: ItemName>(type: T) {
print(type.message)
}
}
enum SideDishType: String, ItemName {
case fries = "Fries"
case calzone = "Calzone"
var message: String {
"\(self.rawValue) side dish is ready!"
}
}