Насправді, відчувається, що стрімкий намагається просувати рядки, щоб обробляти менше, як об'єкти і більше схожі на значення. Однак це не означає, що під стрімким капотом стринги не трактуються як об'єкти, так як я впевнений, що ви всі помітили, що ви все ще можете викликати методи на рядках та використовувати їх властивості.
Наприклад:-
//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)")
У objectC ви можете передавати посилання на рядовий об'єкт через змінну, крім методів виклику на ньому, що в значній мірі встановлює той факт, що рядки є чистими об'єктами.
Ось улов, коли ви намагаєтесь розглядати String як об'єкти, у швидкому випадку ви не можете передавати рядковий об'єкт за посиланням через змінну. Свіфт завжди передасть абсолютно нову копію рядка. Отже, рядки більш відомі як типи значень у швидкій формі. Насправді два літеральні рядки не будуть однаковими (===). Вони розглядаються як дві різні копії.
let curious = ("ca" === "ca")
println("This will be false.. and the answer is..\(curious)")
Як ви бачите, ми починаємо відходити від звичайного способу мислення струн як предметів і ставимось до них як до цінностей. Отже,. Ви можете лише порівняти його значення або іншими словами перевірити рівність (==).
let NotSoCuriousAnyMore = ("ca" == "ca")
println("This will be true.. and the answer is..\(NotSoCuriousAnyMore)")
Це стає цікавішим, коли швидко дивишся на незмінність струнних об'єктів. Але це для іншого питання, іншого дня. Щось, напевно, варто подивитися, викликати його справді цікаво. :) Сподіваюся, що це усуне певну плутанину. Ура!
===
є операторами ідентичності, тоді==
як оператором рівності (за замовчуванням викликisEqual:
NSObject та його підкласів)