Swift 3: Date vs NSDate?
Quelle est la différence entre les classes NS et non NS? Particulièrement NSDate
et Date
? Fait NS
représenter un certain type d'emballage autour de la base non NS
fonctionnalité?
5 réponses
Swift 3 introduit de nouveaux types de valeurs de superposition pour les
Types de classes de base, tels que Date
NSDate
,Data
pour
NSData
et un peu plus. La liste complète et les détails se trouvent dans
certaines des raisons étaient
- Fournir une valeur sémantique,
let
etvar
au lieu de mutables et immuable variantes,- plus D'APIs "Swifty".
les nouveaux types de superposition devraient fournir toutes les fonctionnalités qui: le type de fondation correspondant A, mais si nécessaire, vous pouvez toujours fonte d'un type à l'autre.
lorsque les IPA de la Fondation sont importés dans Swift, les types sont pontés automatiquement.
en ce qui concerne Date
et NSDate
:Date
est un type de valeur
et peut être une constante ou variable:
var date = Date()
date += 10.0 // Add 10 seconds
alors que NSDate
est un type de référence et immuable.
Aussi Date
Comparable
let date1 = Date()
let date2 = Date()
if date1 < date2 { }
alors que NSDate
s peut seulement être comparé avec .compare()
.
Remarque: pour ces "types de superposition" , la valeur type (struct)
Date
et son équivalent de base (Classe) tel que NSDate
sont différents types et les deux peuvent être utilisés à partir de Swift.
Il ne doit pas être confondu avec
NS
le préfixe a tout simplement été supprimé pour certaines fondations
les classes, par exemple,NSBundle
renomméeBundle
pour Swift 3.
les classes NS sont des classes Objective-C. Comme Objective-C est l'ancien langage de programmation pour les applications iOS ou MacOS, Swift vous permet d'utiliser ces classes dans votre code. Vous pouvez donc migrer les applications de L'Objectif-C vers Swift si vous le souhaitez.
les classes ou les structures non-NS sont les équivalents Swift des classes ou des structures NS. Vous pouvez lire plus sur ce problème ici ou ici.
mais attention: comme objectif - C et Swift font sont des langages de programmation différents, il peut arriver que les classes NS et non-NS ne fonctionnent pas complètement de la même manière.
ainsi que les réponses données ci-dessus, au sens littéral plus superficiel, NS était un préfixe donné à tout à L'époque de NextStep, avant que Steve Jobs ne soit rappelé à Apple, et donc une partie naturelle de la syntaxe Objective-C.
fast forward au développement de Swift, ils avaient besoin d'un point de différence évidente, abd il aurait bien pu être CL comme préfixe, (pour Chris Lattner) mais évidemment choisi d'avoir une absence de tout préfixe
la différence entre les classes NS et non NS est que les classes NS sont des types de référence alors que les classes non NS sont des types de valeur . Dans swift 3, Apple a introduit des classes de base comme NSDate et les a renommées à ce jour, mais étant donné que swift est basé sur les types de valeurs plutôt que sur le type de référence, la Date est un type de valeur. Par exemple:
let date = NSDate() //1
date.dateByAddingTimeInterval(1000) //2
2 . Admissible comme bien que la date soit constante, mais la mutabilité dépend de la classe plutôt que de la valeur de V variable.
alors que
let date = Date() //3
date.dateByAddingTimeInterval(1000) //4
4. n'est pas autorisé n'est pas autorisé et résulterait en erreur car let fait 'date' une constante avec 'let' comme date est type Date() qui est un type valeur.
NSDate
et Date
ne sont pas la même chose. Les classes NS (étape suivante) ne sont actuellement utilisées que dans L'Objectif-C, donc dans L'Objectif-C pour représenter une variable de date NSDate.
en ce qui concerne spécifiquement Swift 3.0 la plus récente version de Swift Apple a entièrement supprimé la nécessité d'utiliser le préfixe NS à l'un des types. Donc, juste dans Swift trois, nous utilisons maintenant la Date au lieu de NSDate. pour rendre votre code plus propre