Type-Safe Associated Objects in Swift