NSDate() vs NSDate.date() dans Swift
Im suivant les Le Bloc.io Swiftris tutoriel où ils initialiser une date par:
lastTick = NSDate.date()
Ce qui provoque une erreur de compilation:
'date()' is unavailable: use object construction 'NSDate()'
Qui doit être égale à:
NSDate *lastTick = [NSDate date];
(à partir de la NSDate de référence)
N'a Apple de changer le Swift interface NSDate, depuis que j'ai vu d'autres exemples d'utilisation de NSDate.date
?
Est-ce juste NSDate ou pouvez-vous ne pas appeler les méthodes de type pour tout Objective-C Api?
- En Objective-C,
[NSDate date]
appelle simplement[[NSDate alloc] init]
. Par conséquent, vous ne devez pas appelerNSDate.date()
en Swift. Simplement en appelantNSDate()
sera l'initialisation d'un objet date avec la date actuelle. - Pourquoi avez-vous supprimer votre réponse? J'étais sur le point d'accepter.
- Eh bien, j'ai pensé qu'il applique plus qu'un commentaire, mais apparemment, c'était suffisant comme réponse... Avez récupéré, vous pouvez voter jusqu'au moins, si l'accepte pas... 😀
- ne vous trompez NSDate.date() au lieu de NSDate.init() ?
- Non, j'ai suivi un tutoriel qui a utilisé .date. Il le dit très clairement dans la question.
Vous devez vous connecter pour publier un commentaire.
[NSDate date]
est une méthode de fabrique pour la construction d'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 Objective-C api:
De sorte que la méthode de fabrique:
est converti en un initialiseur de Swift
Ce n'est pas seulement NSDate où vous trouverez ce modèle, mais dans d'autres API Cocoa avec des méthodes de fabrique.
[NSDate data]
en Objective-C, soit si la classe ont été mis en œuvre de nouvelles maintenant; ARC signifie qu'il est limité pour plus de commodité dans de simplesalloc] init] autorelease];
de style usine méthodes.Il semble que
NSDate()
est une nouvelle syntaxe. Auparavant,NSDate.date()
travaillé,mais maintenant, vous devez utiliser
NSDate()
NSDate.date()
me donne une erreur de compilation.NSDate.date()
travaillé", alors ne pas écrire "plus tôtNSDate.date()
œuvres", parce qu'ils signifient des choses complètement différentes.NSDate()
à partir du message d'erreur dans ma question (je ne suis pas un idiot). Ma question était de savoir pourquoi le Swift interface est différente de l'Obj.-CEn Objective-C,
[NSDate date]
appelle simplement[[NSDate alloc] init]
. Par conséquent, vous ne devez pas appelerNSDate.date()
en Swift. Simplement en appelantNSDate()
sera l'initialisation d'un objet date avec la date actuelle.Oui, ils l'ont fait. Pour moi, le compilateur dit:
De sorte qu'il est explicitement marqué indisponible pour Swift. Cela signifie qu'il a été officiellement obsolète.
'date()' is unavailable: use object construction 'NSDate()'
dans Xcode. Quel compilateur utilisez-vous?xcrun swift
.