Created
October 24, 2015 04:29
-
-
Save takaheraw/feef7b64dd24cf237c2d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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