Skip to content

Instantly share code, notes, and snippets.

@takaheraw
Created October 24, 2015 04:29
Show Gist options
  • Save takaheraw/feef7b64dd24cf237c2d to your computer and use it in GitHub Desktop.
Save takaheraw/feef7b64dd24cf237c2d to your computer and use it in GitHub Desktop.
protocol Floorplan {
var seats:Int { get }
var enginePosition:EngineOption { get }
}
enum EngineOption : String {
case FRONT = "Front"
case MID = "Mid"
}
class ShortFloorplan : Floorplan {
var seats = 2
var enginePosition = EngineOption.MID
}
class StandardFloorplan : Floorplan {
var seats = 4
var enginePosition = EngineOption.FRONT
}
class LongFloorplan : Floorplan {
var seats = 8
var enginePosition = EngineOption.FRONT
}
protocol Suspension {
var suspensionType:SuspensionOption { get }
}
enum SuspensionOption : String {
case STANDARD = "Standard"
case SPORTS = "Firm"
case SOFT = "Soft"
}
class RoadSuspension : Suspension {
var suspensionType = SuspensionOption.STANDARD
}
class OffRoadSuspension : Suspension {
var suspensionType = SuspensionOption.SOFT
}
class RaceSuspension : Suspension {
var suspensionType = SuspensionOption.SPORTS
}
protocol Drivetrain {
var driveType:DriveOption { get }
}
enum DriveOption : String {
case FRONT = "Front"
case REAR = "Rear"
case ALL = "4WD"
}
class FrontWheelDrive : Drivetrain {
var driveType = DriveOption.FRONT
}
class RearWheelDrive : Drivetrain {
var driveType = DriveOption.REAR
}
class AllWheelDrive : Drivetrain {
var driveType = DriveOption.ALL
}
enum Cars : String {
case COMPACT = "VW Golf"
case SPORTS = "Porsche Boxter"
case SUV = "Cadillac Escalade"
}
struct Car {
var carType:Cars
var floor:Floorplan
var suspension:Suspension
var drive:Drivetrain
func printDetails() {
print("Car type: \(carType.rawValue)")
print("Car type: \(floor.seats)")
print("Car type: \(floor.enginePosition.rawValue)")
print("Car type: \(suspension.suspensionType.rawValue)")
print("Car type: \(drive.driveType.rawValue)")
}
}
var car = Car(carType: Cars.SPORTS, floor: ShortFloorplan(), suspension: RaceSuspension(), drive: RearWheelDrive())
car.printDetails()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment