W rzeczywistości wydaje się, że szybki próbuje promować ciągi, które będą traktowane mniej jak obiekty, a bardziej jak wartości. Nie oznacza to jednak, że pod maską swift nie traktuje łańcuchów jako obiektów, ponieważ jestem pewien, że wszyscy zauważyliście, że nadal można wywoływać metody na łańcuchach i używać ich właściwości.
Na przykład:-
//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)")
W objectC możesz przekazać odwołanie do obiektu łańcuchowego przez zmienną, oprócz wywoływanych na nim metod, co prawie potwierdza fakt, że łańcuchy są obiektami czystymi.
Oto haczyk, gdy próbujesz spojrzeć na String jako obiekty, szybko nie możesz przekazać obiektu string przez referencję przez zmienną. Swift zawsze przekaże zupełnie nową kopię ciągu. W związku z tym łańcuchy są bardziej znane jako typy wartości w trybie szybkim. W rzeczywistości dwa literały łańcuchowe nie będą identyczne (===). Są traktowane jako dwie różne kopie.
let curious = ("ca" === "ca")
println("This will be false.. and the answer is..\(curious)")
Jak widać, zaczynamy odrywać się od konwencjonalnego sposobu myślenia o ciągach jako obiektach i traktowania ich bardziej jak wartości. Dlatego .isEqualToString, który został potraktowany jako operator tożsamości dla obiektów łańcuchowych, nie jest już poprawny, ponieważ nigdy nie można uzyskać dwóch identycznych obiektów łańcuchowych w Swift. Możesz jedynie porównać jego wartość lub innymi słowy sprawdzić równość (==).
let NotSoCuriousAnyMore = ("ca" == "ca")
println("This will be true.. and the answer is..\(NotSoCuriousAnyMore)")
Staje się to bardziej interesujące, gdy spojrzysz na zmienność obiektów łańcuchowych w szybki sposób. Ale to już kolejne pytanie, kolejny dzień. Coś, na co prawdopodobnie powinieneś spojrzeć, bo to naprawdę interesujące. :) Mam nadzieję, że to rozwiąże pewne zamieszanie. Twoje zdrowie!
===
jest operatorami tożsamości, podczas gdy==
jest operatorem równości (domyślnie wywołujeisEqual:
NSObject i jego podklasy)