web-dev-qa-db-fra.com

NSDate () vs NSDate.date () dans Swift

Je suis avec le tutoriel Bloc.io Swiftris où ils initialisent une date par:

lastTick = NSDate.date()

Ce qui provoque une erreur de compilation:

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

Ce qui devrait égaler:

NSDate *lastTick = [NSDate date];

(à partir de référence NSDate )

Did Apple change the Swift interface to NSDate , puisque j'ai vu d'autres exemples qui utilisent NSDate.date?

Est-ce juste NSDate ou ne pouvez-vous pas appeler des méthodes de type pour des API Objective-C?

42
max

[NSDate date] est une méthode d'usine pour construire un objet NSDate.

Si vous lisez le guide "Utilisation de Swift avec Cocoa et Objective-C", il y a une section sur l'interaction avec les API Objective-C:

Pour des raisons de cohérence et de simplicité, les méthodes de fabrique d'Objective-C sont mappées en tant qu'initialiseurs de commodité dans Swift. Ce mappage permet de les utiliser avec la même syntaxe claire et concise que les initialiseurs. "

Extrait de: Apple Inc. "Utilisation de Swift avec Cocoa et Objective-C." IBooks. https://itun.es/gb /1u3-0.l

Donc, la méthode d'usine:

[NSDate date]

est converti en un initialiseur dans Swift

NSDate()

Ce n'est pas seulement NSDate où vous trouverez ce modèle, mais dans d'autres API Cocoa avec des méthodes d'usine.

78
bandejapaisa

Il semble que NSDate() soit une nouvelle syntaxe. Auparavant, NSDate.date() fonctionnait,

mais maintenant vous devez utiliserNSDate()

11
ChikabuZ

Dans Objective-C, [NSDate date] Appelle simplement [[NSDate alloc] init]. Par conséquent, vous n'avez pas besoin d'appeler NSDate.date() dans Swift. Un simple appel à NSDate() initialisera un objet date avec la date actuelle.

8
ZeMoon

Apple a changé l'interface Swift en NSDate)?

Oui, ils ont. Pour moi, le compilateur raconte:

Foundation.NSDate: 3: 26: note: 'date ()' a été explicitement marqué comme indisponible ici:

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

Il est donc explicitement marqué comme indisponible pour Swift. Cela signifie qu'il est officiellement obsolète.