Что означает двойной знак вопроса в конце шрифта? - PullRequest
0 голосов
/ 04 марта 2020

Я столкнулся со странным типом в секции Show Quick Help в Playground.

Я открыл секцию Show Quick Help для просмотра типа first, который является свойством Array, когда я пытался найти решение для другой странной ошибки.


  • Что это значит?

  • У кого-нибудь есть идеи?


Тип

Double??

screen-shot

Ответы [ 2 ]

4 голосов
/ 04 марта 2020

Double?? - сокращенная запись для Optional<Optional<Double>>, которая является просто вложенной Optional. Optional является родовым c enum, чье значение Wrapped может фактически быть другим Optional, и, следовательно, вы можете создавать вложенные Optional s.

let optional = Optional.some(2)
let nestedOptional = Optional.some(optional)

Тип nestedOptional здесь Int??.

Для вашего конкретного примера c, item.first равен Double??, поскольку сам item имеет тип [Double?] и Array.first также возвращает Optional следовательно вы получите вложенный Optional.

Ваш compactMap вызов data ничего не достигает, так как вы вызываете его во внешнем массиве, элементы которого сами являются необязательными массивами. Чтобы отфильтровать элементы nil из вложенных массивов, вам нужно map over data и затем вызвать compactMap внутри map.

let nonNilData = data.map { $0.compactMap { $0 } } // [[100, 35.6], [110, 42.56], [120, 48.4], [200]]
0 голосов
/ 04 марта 2020

Это одна из самых важных функций Swift. Это необязательно . Может иметь значение или быть нулевым.

Я настоятельно рекомендую вам скачать книгу о Swift, например, одну из бесплатных книг Swift от Apple.

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