diff --git a/AirportDepartures.playground/Contents.swift b/AirportDepartures.playground/Contents.swift index 98e2131..77c3a69 100644 --- a/AirportDepartures.playground/Contents.swift +++ b/AirportDepartures.playground/Contents.swift @@ -16,9 +16,76 @@ import UIKit //: e. Use a `String?` for the Terminal, since it may not be set yet (i.e.: waiting to arrive on time) //: //: f. Use a class to represent a `DepartureBoard` with a list of departure flights, and the current airport - - - +enum FlightStatus: String { +case enRoute = "En Route" +case scheduled = "Scheduled" +case canceled = "Canceled" +case boarding = "Boarding" +case delayed = "Delayed" +case landed = "Landed" +} + +struct AirportDestination { +var location: String +} + +struct Flight { +var destination: AirportDestination +var departureTime: Date? +var flightNumber: String +var terminal: String? +var airline: String +var status: FlightStatus.RawValue +} + + +class DepartureBoard { +var currentFlights: [Flight] +var currentAirport: String + +init (currentFlights: [Flight], currentAirport: String) { + self.currentFlights = currentFlights + self.currentAirport = currentAirport +} +func addFlights() { + currentFlights.append(contentsOf: flights) + } + +func statusAlert() { + for flight in currentFlights + { + switch flight.status { + case "Canceled": + print("We're sorry your flight to \(flight.destination.location) was canceled, here is a $500 voucher") + case "Scheduled": + var alert: String = "Your flight to \(flight.destination.location) is scheduled to" + if let unwrappedDepartureTime = flight.departureTime { + alert += " depart at \(unwrappedDepartureTime)" + } else { + alert += " depart at TBD" + } + if let unwrappedTerminal = flight.terminal { + alert += " from terminal \(unwrappedTerminal)" + } else { + alert += " from terminal TBD" + } + print(alert) + case "Boarding": + if let unwrappedTerminal = flight.terminal { + print("Your flight is boarding, please head to terminal: \(unwrappedTerminal) immediately. The doors are closing soon.") + } + case "En Route": + print("Your flight is currently En Route.") + case "Delayed": + print("Your flight has been delayed.") + case "Landed": + print("Your flight has landed.") + default: + break + } + } +} +} //: ## 2. Create 3 flights and add them to a departure board //: a. For the departure time, use `Date()` for the current time //: @@ -29,8 +96,18 @@ import UIKit //: d. Make one of the flights have a `nil` terminal because it has not been decided yet. //: //: e. Stretch: Look at the API for [`DateComponents`](https://developer.apple.com/documentation/foundation/datecomponents?language=objc) for creating a specific time +let board = DepartureBoard(currentFlights: [], currentAirport: "JFK Airport") + + +let spainFlight = Flight(destination: AirportDestination(location: "Port of Spain"), departureTime: Date(), flightNumber: "BW551", terminal: "4", airline: "Carribean Airlines", status: "Scheduled") + +let tokyoFlight = Flight(destination: AirportDestination(location: "Tokyo, Japan"), departureTime: nil, flightNumber: "JL3", terminal: "1", airline: "JAL", status: "Canceled") +let koreaFlight = Flight(destination: AirportDestination(location: "Seoul, Korea"), departureTime: Date(), flightNumber: "KE250", terminal: nil, airline: "Korean Air", status: "En Route") +let flights = [spainFlight, tokyoFlight, koreaFlight] + +board.addFlights() //: ## 3. Create a free-standing function that can print the flight information from the `DepartureBoard` //: a. Use the function signature: `printDepartures(departureBoard:)` @@ -40,8 +117,15 @@ import UIKit //: c. Make your `FlightStatus` enum conform to `String` so you can print the `rawValue` String values from the `enum`. See the [enum documentation](https://docs.swift.org/swift-book/LanguageGuide/Enumerations.html). //: //: d. Print out the current DepartureBoard you created using the function +func printDepartures(departureBoard: DepartureBoard) { + for flight in departureBoard.currentFlights { + if let unwrappedDeparture = flight.departureTime, let unwrappedTerminal = flight.terminal { + print("Destination: \(flight.destination.location), Airline: \(flight.airline), Flight: \(flight.flightNumber), Departure Time: \(unwrappedDeparture), Terminal: \(unwrappedTerminal), Status: \(flight.status)") + } +} +} - +printDepartures(departureBoard: board) //: ## 4. Make a second function to print print an empty string if the `departureTime` is nil @@ -58,26 +142,17 @@ import UIKit //: Destination: Los Angeles Airline: Delta Air Lines Flight: KL 6966 Departure Time: Terminal: 4 Status: Canceled //: Destination: Rochester Airline: Jet Blue Airways Flight: B6 586 Departure Time: 1:26 PM Terminal: Status: Scheduled //: Destination: Boston Airline: KLM Flight: KL 6966 Departure Time: 1:26 PM Terminal: 4 Status: Scheduled - - - -//: ## 5. Add an instance method to your `DepatureBoard` class (above) that can send an alert message to all passengers about their upcoming flight. Loop through the flights and use a `switch` on the flight status variable. -//: a. If the flight is canceled print out: "We're sorry your flight to \(city) was canceled, here is a $500 voucher" -//: -//: b. If the flight is scheduled print out: "Your flight to \(city) is scheduled to depart at \(time) from terminal: \(terminal)" -//: -//: c. If their flight is boarding print out: "Your flight is boarding, please head to terminal: \(terminal) immediately. The doors are closing soon." -//: -//: d. If the `departureTime` or `terminal` are optional, use "TBD" instead of a blank String -//: -//: e. If you have any other cases to handle please print out appropriate messages -//: -//: d. Call the `alertPassengers()` function on your `DepartureBoard` object below -//: -//: f. Stretch: Display a custom message if the `terminal` is `nil`, tell the traveler to see the nearest information desk for more details. - - - +func printDepartures2(departureBoard: DepartureBoard) { + for flight in departureBoard.currentFlights { +// let emptyString: String = "" + if let unwrappedDeparture = flight.departureTime { + print("\(unwrappedDeparture)") + } +} +} + + printDepartures2(departureBoard: board) + board.statusAlert() //: ## 6. Create a free-standing function to calculate your total airfair for checked bags and destination //: Use the method signature, and return the airfare as a `Double` @@ -96,6 +171,13 @@ import UIKit //: e. Make sure to cast the numbers to the appropriate types so you calculate the correct airfare //: //: f. Stretch: Use a [`NumberFormatter`](https://developer.apple.com/documentation/foundation/numberformatter) with the `currencyStyle` to format the amount in US dollars. - - - +func calculateAirfare(checkedBags: Int, distance: Double, travelers: Int) -> Double { + let ticketPrice = Double(distance) * 0.10 + let bagPrice = checkedBags * 25 + let totalCost: Double = (ticketPrice * Double(travelers)) + Double(bagPrice) + return totalCost +} + +calculateAirfare(checkedBags: 3, distance: 1000.0, travelers: 3) +calculateAirfare(checkedBags: 6, distance: 2534.23, travelers: 6) +calculateAirfare(checkedBags: 2, distance: 3000.45, travelers: 2) diff --git a/AirportDepartures.playground/playground.xcworkspace/contents.xcworkspacedata b/AirportDepartures.playground/playground.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/AirportDepartures.playground/playground.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/AirportDepartures.playground/playground.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/AirportDepartures.playground/playground.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/AirportDepartures.playground/playground.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/AirportDepartures.playground/playground.xcworkspace/xcuserdata/clee.xcuserdatad/UserInterfaceState.xcuserstate b/AirportDepartures.playground/playground.xcworkspace/xcuserdata/clee.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..941fa34 Binary files /dev/null and b/AirportDepartures.playground/playground.xcworkspace/xcuserdata/clee.xcuserdatad/UserInterfaceState.xcuserstate differ