Quelle est la différence entre les classes NS et non NS? En particulier NSDate
vs Date
? Est-ce que NS
représente un type d’emballage autour de la fonctionnalité de base autre que NS
?
Réponses
Trop de publicités?Swift 3 introduit quelques nouvelles de superposition des types de valeur pour les
Fondation de la classe de types, tels que l' Date
pour NSDate
, Data
pour
NSData
et un peu plus. La liste complète et les détails peuvent être trouvés dans
Certaines des raisons qui ont été
- Fournir une valeur sémantique,
-
let
etvar
au lieu de changeant et immuable variantes, - plus "Swifty" Api.
Les nouveaux types d'incrustation doit fournir toutes les fonctionnalités que le correspondant de la Fondation de type a, mais si nécessaire, vous pouvez toujours fonte d'un type à l'autre.
Lorsque les bases sont des Api importés dans Swift, les types sont reliés automatiquement.
À l'égard Date
et NSDate
: Date
est une valeur de type
et peut être une constante ou une variable:
var date = Date()
date += 10.0 // Add 10 seconds
alors qu' NSDate
est un type de référence et immuable.
Aussi Date
est Comparable
let date1 = Date()
let date2 = Date()
if date1 < date2 { }
alors qu' NSDate
s ne peut être comparé avec .compare()
.
Remarque: Pour ces "types d'incrustation", le type de valeur (struct)
comme l' Date
et de sa Fondation de contrepartie (de classe) comme NSDate
sont de types différents, et les deux peuvent être utilisés à partir de Swift.
Il ne doit pas être confondu avec
où l' NS
préfixe a tout simplement été abandonnée pour certains de la Fondation
les classes, par exemple, NSBundle
est renommé pour Bundle
pour Swift 3.
NS les classes sont en Objective-C classes. Comme Objective-C est le plus vieux langage de programmation pour iOS et MacOS applications, Swift vous permet d'utiliser ces classes structs dans votre code. Ainsi, vous pouvez migrer les applications d'Objective-C, Swift si vous le souhaitez.
Le non-NS classes ou des structures sont la Swift équivalents de de la la NS classes ou des structures. Vous pouvez lire plus sur ce sujet ici ou ici.
Mais attention: Comme Objective-C et Swift ne sont différents langages de programmation, il peut arriver que NS et non-NS les cours ne sont pas entièrement un travail de la même façon.
Outre les 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 et faisait donc naturellement partie de la syntaxe d'Objective-C.
Avance rapide pour 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 avoir de préfixe
La différence entre NS non NS classes, c'est que le NS les classes sont de type référence, alors que l'autre NS les classes sont de type valeur . Dans swift 3 , Apple a introduit des classes de base comme NSDate et re-nommé à Jour, mais depuis swift est basée sur la valeur et les types plutôt que le type de référence, par conséquent, la Date est un type de valeur. Par exemple:
let date = NSDate() //1
date.dateByAddingTimeInterval(1000) //2
2 . Admises en tant que bien que la date est constante, mais la mutabilité dépend de la classe plutôt que de laisser vs variable.
alors que
let date = Date() //3
date.dateByAddingTimeInterval(1000) //4
4. n'est pas autorisé non autorisé et le résultat serait une Erreur que de laisser rend 'date' une constante avec " let " comme date Date() de type qui est un type valeur.
NSDate
et Date
ne sont pas la même chose. Les classes NS (étape suivante) sont pour le moment utilisées uniquement dans Objective-C, donc dans Objective-C pour représenter une variable de date NSDate.
En ce qui concerne spécifiquement Swift 3.0, la dernière version de Swift Apple a totalement éliminé la nécessité d’utiliser le préfixe NS pour tous les types. Donc, dans Swift trois, nous utilisons maintenant Date au lieu de NSDate. pour rendre votre code plus propre