Introduction to Swift Keypaths

Example: Generic Settings

released Fri, 29 Mar 2019
Swift Version 5.0

Generic Settings

Our first practical example showcases how keypaths, protocols, and keypath composition work together to allow you to handle app settings in a generic manner. Here is the problem we're trying to solve, have a look at these different settings screens for our Chat app:


Lets map those settings as a type:

final class ProfileSettings {
  var displayName: String
  var shareUpdates: Bool

final class PrivacySettings {
  var passcode: Bool
  var addByID: Bool

final class Settings {
  var profileSettings: ProfileSettings
  var privacySettings: PrivacySettings

If we want to find a generic abstraction for these settings, it would be very difficult. That's because they're all so very different. Their types are String, Bool, Bool, Bool, and ProfileSettings, PrivacySettings. Even more, as we expand our settings they will become more and more different. Lets try to find a nice solution for this by utilizing keypaths.