ChrisWren/flicks-ios-tutorial-app

[Intro to iOS] Project 1: Flicks

ChrisWren opened this issue · 1 comments

My app is complete please review /cc @codepathreview

👍 Nice work Chris!

A few notes after checking out your code:

  • Instead of adding a panGestureRecognizer to dismiss the keyboard on scroll, you can instead implement the UIScrollViewDelegate method scrollViewDidScroll.
  • One suggest on coding style is to organize your view controllers where each protocol implementation is in an extension of your view controller (just to separate the code)

I've also included our generic assignment 1 feedback below:

  • Did you follow Swift coding conventions? The Ray Wenderlich Swift Style Guide and the Github Swift Style Guide are two great resources for reading up on Swift coding conventions.
  • Did you use groups to organize your source files? It's pretty common to organize your source files into Groups, especially for larger projects. You can organize by type of class (i.e. View Controllers, Views, etc) or for larger apps by functionality (i.e. Home Screen, Search Screen, etc).
  • Did you minimize the number of public functions and properties in your classes? You should always try to minimize the number of properties and functions that are public or internal. This is a coding best practice.
  • Did you properly set the Content Mode for your ImageViews? By default the UIContentMode will stretch the image to match the dimensions of the image view, which is probably not what you want.
  • Were you careful to avoid naming collisions inside of your UITableViewCell? When creating a custom cell make sure to never name a property imageView, titleLabel, or subtitleLabel. Those are already defined by UITableViewCell and using them in your custom cell will cause subtle things to happen such as image views not loading until you click on the cell.
  • Did you create a movie model? Creating a Movie model class with a factory method to create movie instances from dictionaries is a great pattern that will be become very useful as the model objects get more complex in later assignments.
  • Did you explore using a library to work with JSON more easily? There are certain libraries like SwiftyJSON that remove the need for a lot of boilerplate code and make it easier to convert from JSON to your model objects.
  • Did you show an error message when there is a network failure? Some apps will preemptively notify the user when there is no network connection, but more commonly you'll see the app try to issue the network request and show the error message on failure.
  • Did you implement the Search functionality? NSPredicate is a handy class that can be used to do complex searches.
  • Could you improve the UI and UX? In all of these assignments, there are key places where you have the opportunity to improve the UI and UX. For example, it would be nice to add small icons to the layout of each cell. It also makes a big difference if you add proper margins, fonts, text sizes, etc. A lot of the details aren't technically challenging, but make the app a lot more visually appealing.
  • On the Movie Details Screen, did you avoid a gap at bottom of the synopsis when the user scrolls up really fast? One way to do this is to extend the frame of the Container View past the bottom of visible area (and have its background color set).
  • Did you make sure to deselect the movie cell after the user selects it? When using a tableView, you should call deselectRowAtIndexPath from your didSelectRowAtIndexPath method to ensure the selected state doesn't remain on the tableView cell.
  • If using a collectionView, did you customize the flow layout to have proper spacing between items? You can use UICollectionViewFlowLayout to customize the layout of your items.

If you have any other questions, feel free to reply here or bring them up at the beginning of class tomorrow.

Thanks,
Nick