Key Path Expressions as Functions

able to use the key path expression \Root.value wherever functions of (Root) -> Value are allowed. Swift 5.2

👉 paiza.io

struct User {
    let email: String
    let isActive: Bool
}

let users = [
    User(email: "joe@me.com", isActive: true),
    User(email: "joy@me.com", isActive: false)
]

// ⭐️ key path as functions
// 1. \.email    = { $0.email    }
// 2. \.isActive = { $0.isActive }
//                     ╭──1──╮
let emails = users.map(\.email)    // (User) -> String
// ["joe@me.com", "joy@me.com"]

//                             ╭───2────╮
let activeUsers = users.filter(\.isActive)    // (User) -> Bool
// [User(email: "joe@me.com", isActive: true)]

// ⭐️ subscript <---> key path 
// user[keyPath: \User.isActive] == user.isActive 
// let userStates = users.map { user in user[keyPath: \User.isActive] } // == users.map { $0.isActive }
     

Last updated

Was this helpful?