107 votes

Swift - quels types utiliser ? NSString ou String

Avec l'introduction de Swift, j'ai essayé de me familiariser avec le nouveau langage

Je suis un développeur iOS et j'utiliserais des types tels que NSString, NSInteger, NSDictionary dans une application. J'ai remarqué que dans l'ebook "The Swift Programming Language" d'Apple, ils utilisent les types Swift suivants String, Int, Dictionary

J'ai remarqué que les types Swift n'ont pas (ou sont nommés différemment) certaines des fonctions que les types Foundation ont. Par exemple NSString a un length propriété. Mais je n'ai pas été en mesure de trouver une propriété similaire pour le Swift. String .

Je me demande si, pour une application iOS, je dois continuer à utiliser les types Foundation ?

98voto

Cezar Points 6222

Vous devez utiliser les types natifs de Swift chaque fois que cela est possible. Le langage est optimisé pour les utiliser, et la plupart des fonctionnalités sont reliées entre les types natifs et le langage Foundation types.

Alors que String y NSString sont pour la plupart interchangeables, c'est-à-dire que vous pouvez passer String dans des méthodes qui prennent NSString et vice versa, certaines méthodes semblent ne pas être automatiquement pontées pour le moment. Voir cette réponse pour une discussion sur la façon d'obtenir la longueur d'une chaîne de caractères et cette réponse pour une discussion sur l'utilisation containsString() pour vérifier les sous-chaînes. (Disclaimer : Je suis l'auteur de ces deux réponses)

Je n'ai pas encore étudié à fond d'autres types de données, mais je suppose qu'une version de ce qui a été dit ci-dessus s'applique également à Array / NSArray , Dictionary / NSDictionary et les différents types de nombres dans Swift et NSNumber

Lorsque vous avez besoin d'utiliser l'un des types Foundation, vous pouvez soit les utiliser pour typer les variables/constantes explicitement, comme dans var str: NSString = "An NSString" ou utiliser bridgeToObjectiveC() sur une variable/constante existante d'un type Swift, comme dans str.bridgeToObjectiveC().length par exemple. Vous pouvez également lancer un String à un NSString en utilisant str as NSString .

Cependant, la nécessité pour ces techniques d'utiliser explicitement les types Foundation, ou du moins certains d'entre eux, pourrait être obsolète à l'avenir, puisque d'après ce qui est indiqué dans la référence du langage, le type String / NSString Le pont, par exemple, devrait être totalement transparent.

Pour une discussion approfondie sur le sujet, voir Utiliser Swift avec Cocoa et Objective-C : Travailler avec les types de données Cocoa

12voto

Emanuel Points 612

Votre meilleure chance est d'utiliser les types et classes natifs de Swift, comme d'autres l'ont noté NSString a une traduction gratuite en String, cependant, ils ne sont pas identiques à 100%, prenez par exemple ce qui suit

var nsstring: NSString = "\U0001F496"
var string: String = "\U0001F496"

nsstring.length
countElements(string)

vous devez utiliser countElements pour compter les caractères dans la chaîne, notez également que nsstring.length renvoie 2, car il compte sa longueur sur la base de l'UTF16.

Similaire, OUI Identique, NON

7voto

Gabriele Petronella Points 32362

String y NSString sont interchangeables, donc cela n'a pas vraiment d'importance de savoir lequel vous utilisez. Vous pouvez toujours choisir entre les deux, en utilisant

let s = "hello" as NSString

ou même

let s: NSString  = "hello"

NSInteger est juste un alias pour un int ou un long (selon l'architecture), donc j'utiliserais simplement Int .

NSDictionary est une question différente, puisque Dictionary est une mise en œuvre totalement distincte.

En général, je m'en tiendrais aux types swift chaque fois que c'est possible et vous pouvez toujours convertir entre les deux au besoin, en utilisant la fonction bridgeToObjectiveC() fournie par les classes Swift.

6voto

Jiaaro Points 14379

Comme les types C objectifs sont toujours distribués dynamiquement, ils seront probablement plus lents. Je dirais qu'il est préférable d'utiliser les types natifs de Swift, sauf si vous avez besoin d'interagir avec les API d'Objective C.

5voto

Nate Cook Points 4815

Utilisez les types natifs de Swift chaque fois que vous le pouvez. Dans le cas de String, cependant, vous avez un accès "transparent" à tous les types natifs de Swift. NSString des méthodes comme celle-ci :

var greeting = "Hello!"
var len = (greeting as NSString).length

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X