Оператор быстрого обратного нулевого слияния? - PullRequest
5 голосов
/ 26 мая 2020

Swift имеет оператор nil-coalescing a ?? b, который является сокращением для a != nil ? a : b. Есть ли в Swift противоположный оператор, сокращение для a == nil ? a : b или, другими словами, a == nil ? nil : b?

Я бы использовал его для сопоставления необязательного значения с чем-то другим, например:

let x = dict["key"] != nil ? mapValue(dict["key"]) : nil
// ideally: let x = dict["key"] ¿¿ mapValue(dict["key"])

1 Ответ

5 голосов
/ 26 мая 2020

dict["key"] возвращает необязательный параметр, и вы хотите сопоставить это значение с другим значением, если оно присутствует, или получить nil в противном случае. Это именно то, для чего Optional.map():

Оценивает данное закрытие, когда этот Optional экземпляр не nil, передавая развернутое значение в качестве параметра.

В вашем случае:

let x = dict["key"].map { mapValue($0) }

или просто

let x = dict["key"].map(mapValue)

Это также имеет преимущество перед

let x = dict["key"] != nil ? mapValue(dict["key"]) : nil
// or the hypothetical
let x = dict["key"] ¿¿ mapValue(dict["key"])

, что dict["key"] оценивается только один раз, а не дважды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...