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é?

32
demandé sur Marcus Leon 2016-10-01 23:50:13

5 réponses

Swift 3 introduit de nouveaux types de valeurs de superposition pour les Types de classes de base, tels que DateNSDate,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 et var 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 DateComparable

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,NSBundlerenomméeBundle pour Swift 3.

50
répondu Martin R 2016-10-01 21:33:19

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.

2
répondu mbachm 2016-10-01 21:17:44

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

1
répondu aremvee 2017-03-11 14:03:45

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.

0
répondu Kukoo Ch 2016-10-01 21:20:36

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

-2
répondu Stefan DeClerck 2016-10-01 21:03:46