Skip to content

Instantly share code, notes, and snippets.

@takaheraw
Created October 24, 2015 04:05
Show Gist options
  • Save takaheraw/211b5fa6e06be1e8d4ae to your computer and use it in GitHub Desktop.
Save takaheraw/211b5fa6e06be1e8d4ae to your computer and use it in GitHub Desktop.
protocol RentalCar {
var name:String { get }
var passengers:Int { get }
var pricePerDay:Float { get }
}
class Compact : RentalCar {
var name = "VW Golf"
var passengers = 3
var pricePerDay:Float = 20
}
class Sports : RentalCar {
var name = "Porsche Boxter"
var passengers = 1
var pricePerDay:Float = 100
}
class SUV : RentalCar {
var name = "Cadillac"
var passengers = 8
var pricePerDay:Float = 75
}
class Minivan : RentalCar {
var name = "Chevrolet"
var passengers = 14
var pricePerDay:Float = 40
}
class CarSelector {
class func selectCar(passengers:Int) -> String? {
var car:RentalCar?
switch (passengers) {
case 0...1:
car = Sports()
case 2...3:
car = Compact()
case 4...8:
car = SUV()
case 9...14:
car = Minivan()
default:
car = nil
}
return car?.name
}
}
let passengers = [1 ,3, 5]
for p in passengers {
print("\(p) passengers: \(CarSelector.selectCar(p))")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment