Who is this for?
This is the last course in our iOS and Swift for Beginners learning path. You're ready for this course if you're working through that learning path in order, or you're someone who has just a little bit of iOS and Swift experience.
You'll build an entire personal library-tracking app in this course, using SwiftUI. Because the app will have multiple screens, you'll apply new techniques for sharing data throughout a SwiftUI app.Along the way, you'll get experience organizing your code using a variety of tools available to you in Swift and Xcode.
- List Views
- Data Models
- View Navigation
- Modal Sheets
- Edit Mode
- Dark Mode
- SwiftUI Environment
- SwiftUI Bindings
- Combine: Published and Observable Objects
- Swift Extensions
- Access Control
- Hashable and Identifiable Protocols
- Custom Types
- Nested Types
Part 1: List View Fundamentals
Learn what's in store for you as you build Your Second iOS and SwiftUI App. This course builds on the Your First App, and Programming in Swift courses.
A List is a View for organizing data into a scrollable column of rows, and a row can be any View! Before you can have a list, you need a reusable row.
Models and Views
Collectively, the properties of a book will be our data model. A book's image will be computed based on it its stored model data.
Challenge: Book Row
With your Book model, and a simple Image View, set up, it is time to provide a book to the view you'll be using for each of your list rows.
With enough of your app built up for it to make sense to incorporate a List, it's nearly as simple as hitting "Embed in List"!
Use NavigationLink and NavigationView to show a new detail view after tapping on a row in the list of books.
Create a reusable view which you can use for your rows, and their detail views. The "details" will be the entirety of longer titles, and larger images.
Review what you're able to do with lists already, and get a couple of ideas for what you can start thinking about in order to apply SwiftUI Lists in the future.
Part 2: Data Flow
In this part, you'll complete your Book type and create more interactive views. Your app will look great in both light and dark mode, too!
Use a modal sheet in your detail view to present an image picker, and bind the result to your library. Soon, your books can have cover photos!
The accent color for an app will be applied to certain views, like button labels, to achieve a desired theme.
The reason the images you're adding to your library are not showing up is because Book Images currently only display symbols. Let's fix that!
An Alert is a good solution for helping a user avoid an unintentional loss of data. Along with the "sheet", it's another type of modal View.
Challenge time! After setting a book's image, show the user a "delete" button, which will bring up your alert from the previous episode.
Convert a Book instance into "Model Object": a reference type that comes with the power of the Identifiable protocol.
Combine makes it easy to take an object, observe changes to its properties, and react to those changes, in SwiftUI.
To complete your detail view, make use of a TextField, binding it to a book's micro-review. Then display the review in your list!
You've given your app a bunch of new features in this part. You can interact with your library and books from multiple places, and your UI syncs right up!
Part 3: Managing Rows
In this part, you'll be adding and removing books from your library, and sorting and reorganizing them.
A List is not only for displaying a collection of similar views. That's the job of ForEach! Employ them both in order to have more complex columns.
Create a sheet that will bring the user to a new view, where they can fill out the information for a new book to be added to their library.
An environment is a storage container for potentially any information that multiple views need to function.
Lists offer customizable Sections, with headers and footers as needed. You'll use a section for each of the two "readMe" options for a book.
ObjectWillChangePublisher powers ObservedObject and EnvironmentObjects in SwiftUI. Use it to propagate ObservableObject changes to collections.
Delete and Move Rows
Using modifiers on a ForEach, move books in your library, or delete them. An Edit Button in the navigation bar can help with both.
Set up a Menu, in the same toolbar as your Edit button, that will allow for sorting by author, title, or manually.
Challenge: Sort Menu
It's time to get the menu from the previous episode working, and finish up this app, with automatic book sorting!
Let's review some of what you've accomplished along the journey of creating Your Second iOS and SwiftUI App. There are more learning paths in store for you next!