En fait, on a l'impression que Swift essaie de promouvoir les chaînes à traiter moins comme des objets et plus comme des valeurs. Cependant, cela ne signifie pas que sous le capot, Swift ne traite pas les chaînes comme des objets, car je suis sûr que vous avez tous remarqué que vous pouvez toujours invoquer des méthodes sur les chaînes et utiliser leurs propriétés.
Par exemple:-
//example of calling method (String to Int conversion)
let intValue = ("12".toInt())
println("This is a intValue now \(intValue)")
//example of using properties (fetching uppercase value of string)
let caUpperValue = "ca".uppercaseString
println("This is the uppercase of ca \(caUpperValue)")
Dans objectC, vous pouvez passer la référence à un objet chaîne via une variable, en plus d'appeler des méthodes dessus, ce qui établit à peu près le fait que les chaînes sont des objets purs.
Voici le hic quand vous essayez de regarder String en tant qu'objets, en rapide vous ne pouvez pas passer un objet chaîne par référence à travers une variable. Swift transmettra toujours une toute nouvelle copie de la chaîne. Par conséquent, les chaînes sont plus communément appelées types de valeurs dans swift. En fait, deux littéraux de chaîne ne seront pas identiques (===). Ils sont traités comme deux copies différentes.
let curious = ("ca" === "ca")
println("This will be false.. and the answer is..\(curious)")
Comme vous pouvez le voir, nous commençons à nous éloigner de la façon conventionnelle de penser les cordes comme des objets et de les traiter davantage comme des valeurs. Par conséquent .isEqualToString qui a été traité comme un opérateur d'identité pour les objets chaîne n'est plus valide car vous ne pouvez jamais obtenir deux objets chaîne identiques dans Swift. Vous ne pouvez comparer que sa valeur, ou en d'autres termes vérifier l'égalité (==).
let NotSoCuriousAnyMore = ("ca" == "ca")
println("This will be true.. and the answer is..\(NotSoCuriousAnyMore)")
Cela devient plus intéressant lorsque vous regardez la mutabilité des objets chaîne dans swift. Mais c'est pour une autre question, un autre jour. Quelque chose que vous devriez probablement étudier, car c'est vraiment intéressant. :) J'espère que cela dissipe une certaine confusion. À votre santé!
===
est un opérateur d'identité alors qu'il==
est un opérateur d'égalité (par défautisEqual:
sur NSObject et ses sous-classes)