web-dev-qa-db-fra.com

Swift 3: Date vs NSDate?

Quelle est la différence entre les classes NS et non NS??? En particulier NSDate contre Date?? Est-ce que NS représente un type d’emballage autour de la fonctionnalité non NS?)?

35
Marcus Leon

Swift 3 a introduit de nouveaux types de valeur de recouvrement pour les types de classe Foundation existants, tels que Date pour NSDate, Data pour NSData et quelques autres. La liste complète et les détails peuvent être trouvés dans

Certaines des raisons étaient

  • Fournir une sémantique de valeur appropriée,
  • let et var à la place de variantes mutables et immuables,
  • plus API "Swifty".

Les nouveaux types de superposition doivent fournir toutes les fonctionnalités du type Foundation correspondant, mais si nécessaire, vous pouvez toujours convertir un type en un autre.

Lorsque les API Foundation existantes sont importées dans Swift, les types sont automatiquement pontés.

En ce qui concerne Date et NSDate: Date est un type valeur et peut être une constante ou une variable:

var date = Date()
date += 10.0 // Add 10 seconds

alors que NSDate est un type de référence et immuable. Aussi Date est Comparable

let date1 = Date()
let date2 = Date()

if date1 < date2 { }

alors que NSDates ne peut être comparé qu'à .compare().

Remarque: Pour ces "types de superposition", le type de valeur (struct) tel que Date et son équivalent Foundation (classe) tel que NSDate sont de types différents et peuvent être utilisés à partir de Swift. Il ne faut pas confondre avec

où le préfixe NS a simplement été supprimé pour certaines classes Foundation, par exemple. NSBundle est renommé en Bundle pour Swift 3.

54
Martin R

Les classes NS sont des classes Objective-C. Comme Objective-C est l'ancien langage de programmation pour applications iOS ou MacOS, Swift vous permet d'utiliser ces structures de classes dans votre code. Vous pouvez ainsi migrer des applications d'Objective-C vers Swift si vous voulez.

Les classes ou structures autres que NS sont les équivalents Swift des classes ou structures NS. Vous pouvez en savoir plus sur ce problème ici ou ici .

Attention, comme Objective-C et Swift sont différents langages de programmation, il peut arriver que NS et les classes non NS ne fonctionnent pas complètement de la même manière). façon.

2
mbachm

En plus des réponses données ci-dessus, dans un sens littéral plus superficiel, NS était un préfixe donné à tout ce qui se passait à l'époque de NeXTSTEP, avant que Steve Jobs ne soit rappelé à Apple. partie naturelle de la syntaxe Objective-C.

Avançons rapidement vers le développement de Swift, ils avaient besoin d’un point de différence évidente, abd aurait pu être un préfixe CL (pour Chris Lattner), mais a évidemment choisi de ne pas utiliser de préfixe.

1
aremvee

La différence entre les classes NS et non NS est que les classes NS sont un type de référence, tandis que les classes non NS sont un type valeur. Dans Swift 3, Apple a introduit les classes Foundation telles que NSDate et les a renommées Date. Depuis, Swift est basé sur des types de valeur plutôt que sur un type de référence. Par conséquent, Date est un type de valeur. Par exemple:

let date = NSDate() //1
date.dateByAddingTimeInterval(1000) //2 

2 Admissible comme si la date est constante mais que la mutabilité dépend de la classe plutôt que de laisser vs variable.

tandis que

let date = Date() //3
date.dateByAddingTimeInterval(1000) //4

4. n'est pas autorisé non autorisé et entraînerait une erreur, car let fait de 'date' une constante avec 'let' car la date est de type Date (), qui est un type de valeur.

0
Kukoo Ch