Подтвердить что ты не робот

NSDate() vs NSDate.date() в Swift

Далее следую учебник Bloc.io Swiftris, где они инициализируют дату:

lastTick = NSDate.date()

Что вызывает ошибку компиляции:

'date()' is unavailable: use object construction 'NSDate()'

Которое должно быть равно:

NSDate *lastTick = [NSDate date];

(из ссылки NSDate)

Яблоко изменило интерфейс Swift на NSDate, так как я видел другие примеры, которые используют NSDate.date?

Это просто NSDate или вы не можете вызывать методы типа для любых API Objective-C?

4b9b3361

Ответ 1

[NSDate date] - это метод factory для построения объекта NSDate.

Если вы читаете руководство "Использование Swift с Cocoa и Objective-C", есть раздел об взаимодействии с Objective-C apis:

Для согласованности и простоты методы Objective-C factory отображаются в качестве инициализаторов удобства в Swift. Это сопоставление позволяет использовать их с тем же кратким синтаксисом, что и инициализаторы.

Отрывок из: Apple Inc. "Использование Swift с Cocoa и Objective-C." интерактивные книги. https://itun.es/gb/1u3-0.l

Итак, метод factory:

[NSDate date]

преобразуется в инициализатор в Swift

NSDate()

Это не просто NSDate, где вы найдете этот шаблон, но и в других Cocoa API с методами factory.

Ответ 2

Кажется, что NSDate() - новый синтаксис. Раньше NSDate.date() работал,

но теперь вы должны использовать NSDate()

Ответ 3

В Objective-C, [NSDate date] просто вызывает [[NSDate alloc] init]. Следовательно, вам не нужно вызывать NSDate.date() в Swift. Просто вызов NSDate() инициализирует объект даты с текущей датой.

Ответ 4

Яблоко изменил интерфейс Swift на NSDate?

Да, они это сделали. Для меня компилятор говорит:

Foundation.NSDate: 3: 26: note: "date()" явно помечена как недоступная здесь:

@objc(date) class func date() -> Self!

Поэтому он явно помечен для Swift. Это означает, что он официально устарел.