NYCSchoolsChallenge

An iOS app for searching, sorting, and viewing details about NYC high schools. Implemented for a take-home assignment.

NYCSchoolsChallenge

Technologies

  • ? async/await
  • ? REST APIs
  • ?️ MVVM
  • ✅ XCTest
  • ? Swift Charts
  • ? SwiftUI
  • ?️ Swift

Highlights

  • I used the .searchable view modifier to enable a simple substring search of the school names, and a Menu for sorting options
  • I added a working row of Link views with special URL schemes which allow users to quickly view the school’s website, call the school, compose an email to the school’s email address, or view the school’s location in the Maps app
  • To illustrate school SAT scores, I used Swift Charts to create a custom horizontal bar chart with .annotation modifiers and custom AxisMarks
  • I used formatters such as .number.notation(.compactName) to efficiently and elegantly display school statistics
  • I used jsonDecoder.keyDecodingStrategy = .convertFromSnakeCase so that I could keep the names of my model struct properties Swifty, which is less work than assigning a raw String value to every CodingKey case
  • MVVM was my choice of architecture to separate models, views, and business logic
  • Using XCTest, I wrote unit tests targeting the most sensitive part of my code, the JSON decoding, which can easily break with any change to the model structs
  • I chose the newer async/await methods of URLSession over the older closure-based methods in my networking service
  • I created a generic Statistic view and a custom LabeledContent style to easily display school statistics in an aesthetic format

GitHub

View Github