2016-08-07 34 views
4

Является ли идея Swift «неявно развернутыми опциями« То же, что и у Java «autoboxing» целых чисел? Следующее исключение во время выполнения будет возможно только в Swift, если xObj объявлена ​​«неявно развернутый вариант»:Как «неявно разворачиваемые опции» Swift отличаются от «автобоксинга» целых чисел Java?

Integer xObj = new Integer(-1); 
xObj = null; // could do this with an implicitly unwrapped optional as well. 
Integer.valueOf(xObj); // <-- exception. Integer.valueOf(int x); couldn't deal with this. 

Суть в том, что «неявно развернутые опциями» может быть нулевым, но лучше быть осторожным и не использовать их когда ожидается не-нулевая ссылка, верно?

ответ

2

Является ли идея «неявно разворачиваемых опций» Swift «такими же, как« автобоксинг »целых чисел Java?

То же самое? Нет. Это слишком сильное заявление. Служите аналогичной цели, в некоторых случаях? Да.

Autoboxing используются в Java 2 основных причины:

  1. Для преобразования типов значений (примитивы) к объектам, так что они могут быть сохранены в коллекциях, как ArrayList и HashMap.

    • Единственные примитивы, которые нуждаются в этом лечении являются byte, short, int, long, float, double, boolean и char. Следовательно, почему они являются единственными типами с эквивалентами объектов с автоматическим ящиком. Автобоксирование Java ограничено только этими типами, тогда как в Swift опции применимы ко всем типам.
    • Собственные коллекции Swift могут хранить типы значений, поэтому это преобразование не требуется.
    • В коллекциях фонда могут храниться только указатели. При использовании их Swift делает аналогичную вещь, например, Java, автоматически переводит числовые типы в объекты NSNumber.
    • Необязательный Swift - это перечисление, тип значения, независимо от того, завершает ли он ссылочный тип или тип значения.
  2. Разрешить для обнуления без использования контрольной суммы. То есть возвращение null вместо -1, Integer.MIN и т.д.

    • Это то, что Optionals Свифта для.
+0

Я понимаю автобоксинг в Java и почему вы его используете. Скорее, я новичок в Свифте. Я понимаю, что «неявно разворачиваются варианты» в терминах автобоксинга Java. –

+0

Моя самая большая проблема заключается в том, что перечисление Swift является * значениями типов * в отличие от объектов. Спасибо за вашу помощь, и у меня есть больше чтения! –

+0

Я должен был указать очевидное (относительно java), чтобы противопоставить его Swift. Как насчет перечислений как типов значений, вы получаете проблемы? – Alexander

Смежные вопросы