Так как приведенные выше ответы ясно объясняют, как безопасно играть с Optionals. Я постараюсь объяснить, что на самом деле опциональные быстрые.
Другой способ объявить необязательную переменную - это
var i : Optional<Int>
И необязательный тип - это не что иное, как перечисление с двумя падежами, т. Е.
enum Optional<Wrapped> : ExpressibleByNilLiteral {
case none
case some(Wrapped)
.
.
.
}
присвойте ноль нашей переменной 'i'. Мы можем сделать var i = Optional<Int>.none
или присвоить значение, мы передадим некоторое значение var i = Optional<Int>.some(28)
Согласно swift, «nil» - это отсутствие значения. И для создания экземпляра, инициализированного с помощью nil
, мы должны соответствовать протоколу, называемому ExpressibleByNilLiteral
, и замечательно, если вы догадались, только Optionals
соответствовать ExpressibleByNilLiteral
, а соответствие другим типам не рекомендуется.
ExpressibleByNilLiteral
имеет единственный метод, называемый init(nilLiteral:)
, который инициализирует объект с нуля. Обычно вы не вызываете этот метод, и в соответствии с быстрой документацией не рекомендуется вызывать этот инициализатор напрямую, так как компилятор вызывает его всякий раз, когда вы инициализируете тип Optional с литералом nil
.
Даже я должен обернуть (не каламбур) мою голову вокруг Факультативного: D Счастливого Свертывания Все .
Здесь - проект с открытым исходным кодом для использования pgp с python. Я думаю, это то, что вы ищете.
На самом деле вам не нужно изобретать алгоритмы самостоятельно, они уже есть.