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