Безопасно ли присваивать NULL значение NSDate *? - PullRequest
0 голосов
/ 16 октября 2019

Я пишу игру, включающую класс Quest, который имеет свойство completionDate типа NSDate *, в котором записывается дата и время, когда игрок завершил квест. Это объявление (в Quest.h):

@property (nonatomic) NSDate *completionDate;

Я подумал, что было бы разумно, в случае, когда игрок еще не завершил квест, присвоить свойству квеста completionDate значениеNULL чтобы указать это. Однако, когда я делаю:

quest.completionDate = NULL;

XCode (11.1) выдает предупреждение в этой строке кода: Null passed to a callee that requires a non-null argument.

Несмотря на предупреждение, мой код работает должным образом:Выполнение проверки, подобной следующей, чтобы определить, завершен ли квест, кажется, работает нормально:

if (quest.completionDate == NULL) { ... }

Исследуя это, я обнаружил похожие вопросы, такие как Xcode 7, Obj-C, "Null". передается вызываемому объекту, который требует ненулевой аргумент ", с ответами, предлагающими просто использовать метод init для инициализации объекта в состояние по умолчанию. Однако в случае NSDate init инициализирует дату как «сейчас» (текущую дату / время), так что это не сработает для того, что я пытаюсь сделать.

Мой вопрос: есть ли причина не назначать NULL для NSDate *?

1 Ответ

1 голос
/ 16 октября 2019

Добавьте атрибут свойства nullable к вашему завершению.

@property (nonatomic, nullable) NSDate *completionDate;

Чтобы узнать больше о том, как объявлять типы, допускающие обнуление, см. Этот пост в блоге Apple Обнуляемость и Objective-C .

...