Skip to content
academia.sh

Course Intermediate

UI Development with SwiftUI

Published Updated

By the end of this course

Start course

01

The View System

Deriving a view from state, modifiers and the effect of their order, vertical, horizontal and depth stacks, the proposed size and the priority negotiation, grids and reading geometry, data-driven lists and forms, text, image and shape components, reusable view builders.

  1. 01 Declarative Syntax A measurement showing that six changes in a view tree produce eight recomputations through four different triggers, and that a value nobody tracks recomputes nothing.
  2. 02 Views and Modifiers A measurement showing that font and color modifiers placed on a container spread to the subtree as environment values, that modifier order changes the result, and that a view that sets its own font does not read the environment.
  3. 03 Stack Layouts A measurement showing that the spacing and axis a stack takes from its owner's state produce the parent trigger for its children, that layout direction comes from the environment, and that siblings in a depth stack cannot read each other's values.
  4. 04 The Layout System A measurement showing that the parent value that determines the proposed size descends to the children as the parent trigger, that the text size preference is read from the environment, and that a size proposal is not a measured value.
  5. 05 Grids and Geometry A measurement showing that the size class determines the grid columns as an environment value, that grid data descends from the parent, and that a measured size is left out of scope because it is not state.
  6. 06 Lists and Forms A measurement showing that a list reading the model's collection is recomputed with the observed trigger, that a form field bound to the parent's state is recomputed with the parent trigger, and that when one row's property changes the other rows are skipped.
  7. 07 Visual Components A measurement showing that the color scheme determines the icon color as an environment value, that the fill ratio of a shape descends from the parent, that the loading state of an image stays local, and that a static image reads no value.
  8. 08 View Builders A measurement showing that a condition inside builder content produces the parent trigger when it depends on the parent's state, that a builder component's own pressed state stays local, and that a closure is not a node in the tree.

02

State and Navigation

Local state owned by a view, sharing state with a child view through a binding, observable objects outside the view, environment values passed down the tree, the programmatic navigation stack and path, sheet, alert and cover presentation, tabs and toolbars.

  1. 01 Local State Measuring that a view's own state recomputes only that view, that lifting the same state to an ancestor turns the trigger into parent, and that a sibling's state leaves the read off-rule.
  2. 02 Bindings Measuring that a child writing a parent's state through a binding is recomputed with the parent trigger, and that the trigger depends on the owner of the value, not on who started the change.
  3. 03 Observable Objects Measuring that reading a property of an observable object produces a recomputation on change, verifying with real observation tracking that only a read property notifies, and showing what object-level notification changes.
  4. 04 Environment Values Measuring that an environment value recomputes only its reader along the tree without touching the views in between, that a property of an object placed in the environment triggers observation rather than environment, and how overriding in a subtree is built in the model.
  5. 05 The Navigation Stack and Path Measuring that the navigation path is a state held at the root, that pushing and going back produce the same trigger, and that a value pushed onto the path is not a view.
  6. 06 Presentation and Dismissal Measuring that presentation state lives in the presenting view, that sheet content reads this state through a binding, and that the dismiss action is not a value.
  7. 07 Tabs and Toolbars Measuring that the tab selection lives at the root, that content which only writes the selection through a binding does not count as a reader, and that a tab that is not selected is skipped because it does not read the selection.

03

Interaction and Presentation Quality

Tap, drag and combined gestures, implicit and explicit animations, transitions for inserting and removing views, accessibility with labels, traits and Dynamic Type, localization with text, date and number formatting, a fast feedback loop with previews.

  1. 01 Gestures Measuring that the temporary value during a drag recomputes only the view that carries the gesture, while the final position written when the gesture ends reaches its readers through the parent trigger.
  2. 02 Implicit and Explicit Animations Measuring that a change wrapped in an animation recomputes the same views through the same trigger as the identical change left unwrapped.
  3. 03 Transitions Measuring that an item deleted from the model recomputes the list view through the observed trigger, that the state opening a detail area recomputes the screen through the local trigger, and that the departing view is not computed.
  4. 04 Accessibility Measuring that Dynamic Type size and the Reduce Motion preference cause recomputation through the environment trigger, and that a label text supplied by the parent does so through the parent trigger.
  5. 05 Localization Showing that the locale and layout direction cause recomputation through the environment trigger, that the model's date property does so through the observed trigger, and that formatting is not measured.
  6. 06 Previews and Iteration Showing how a preview recomputes a view through its sample model and overridden environment, why opening a preview does not count as a change, and a summary of the twenty-one lessons in the course.

Final exam

UI Development with SwiftUI — Final Exam

In preparation

This course's question bank is not complete yet. The exam opens here automatically once enough questions are added.

Start typing to search.

↑↓ ↵ Esc navigate · open · close