2016-01-11 2 views
3

В моей модели кода в настоящее время в некоторых местах, я делаюКогда следует использовать необязательную строку в моей модели?

var optionalString : String? 

и в некоторых местах

var otherString : String = "" 

Когда это необязательная и я разворачивая его, я боюсь, это не должно равной нулю, и только за то, что на безопасной стороне я

let newString = optionalString ?? "" 

с опциями, мне нужно разворачивать и выполнять нулевые чеки. Это делает код немного менее удобочитаемым.

Должна ли строка быть необязательной в модели? Любой сценарий, где он должен быть одним?

ответ

1

IMO, опциональные строки и пустые строки иногда могут быть взаимозаменяемы.

Предположим, у нас есть класс человека, он имеет свойство name. В этом случае лицо должно иметь имя, поэтому необязательные и пустые строки взаимозаменяемы (вы можете использовать их). Вы можете использовать nil или "", чтобы указать, что у человека нет имени. Они означают то же самое. Вы можете объявить константу тоже:

let NoName = "" 

И вы можете просто проверить его с этим очень абстрактной постоянной, а не nil, что немного меньше реферата.

С другой стороны, иногда вы должны использовать опциональный. И именно тогда nil и "" имеют разные значения в контексте. Давайте также будем использовать класс нашего человека, чтобы проиллюстрировать это. Класс человека имеет свойство, называемое dogName. Если у него нет собаки, это nil. Если он/она имеет собаку, но не дал ей имя, это пустая строка. И если у него/нее есть собака и дал ей имя, это будет "fido" или некоторые другие имена. В этом случае nil означает, что у него нет собаки, а "" означает, что у его/ее собаки нет имени. У них есть разные значения!

Заключение: когда нуль и пустая строка имеют одинаковое значение, используйте опционально опционально.Когда нуль и пустая строка имеют разные значения, используйте опцию.

+0

Спасибо, что пример собаки имеет смысл. Это то, что я искал. – runios

+0

Если вы считаете, что мой ответ отвечает на ваш вопрос, пожалуйста, подумайте о том, чтобы принять его, нажав на этот галочку! @runios – Sweeper

+0

Да, да. Пока я чувствую, что пример Николая ближе к программированию. Я тикаю твою, как ты ее дал. – runios

2

Опционы используются, когда отсутствие значения (строка) отличается от семантики от пустого значения.

Простой пример:

Пароль может быть либо

  • набор для некоторой строки
  • пустой
  • еще не установлен на всех.

Здесь «не установленный» корпус должен обрабатываться иначе, чем «пустой» корпус.

Вы должны использовать только опции, если логика модели отличается для пустой или отсутствующей строки. То же самое верно для типов коллекций (Array, Dictionary).

+0

Awesome! отличный пример. – runios

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