Unwrapping and value binding patterns in the condition of ternary expressions

FWIW, in the case I would favor:

guard let newValue = newValue else {
    wrappers[key] = nil
    return
}
wrappers[key] = Wrapper(newValue)

I may be a controversial opinion, but personally I think adding features to ternary expressions should generally be discouraged. IMO it's pretty much a legacy feature from C-based languages that would not have been added otherwise. It's far from clear, confusing for new users, and easily abused. (That said, I use it somewhat liberally :innocent:)

As for not wanting to use map, I agree it feels unintuitive and a bit confusing. I almost never use it even though It's semantically similar to Kotlin's thing.let{} which I use all the time. I think this is due to it's naming being identical to Collection.map, while functionally having a very different use.

Regarding the issues with pattern matching, IMO that's an issue with the poor ergonomics around it and associatedValue outside of Switches, which will hopefully be improved soon, e.g. Extract Payload for enum cases having associated value - #105 by trs.