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
- Confirmation Dialogs
- 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 & Views
Collectively, the properties of a book will be our data model. A book’s image will be computed based on its stored model data.
Review how to add SF Symbols in SwiftUI, and dynamically add an SF Symbol based on a book’s title.
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 be completing 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 reason the images you’re adding to your library are not showing up is Book Images currently only display symbols. Let’s fix that!
The accent color for an app will be applied to certain views, like button labels, to achieve a desired theme.
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! 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.
The environment is not just a place for model objects! Learn how to access useful data via the EnvironmentValues structure.
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 & 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.
Let’s review some of what you’ve accomplished along the journey of creating Your Second iOS and SwiftUI App. There’s a new learning path in store for you, next!