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
?)?
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
let
et var
à la place de variantes mutables et immuables,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 NSDate
s 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.
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.
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.
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.