На самом деле, кажется, что swift пытается продвигать строки, которые будут рассматриваться не как объекты, а как значения. Однако это не означает, что под капотом swift не рассматривает строки как объекты, так как уверен, что вы все заметили, что вы все равно можете вызывать методы для строк и использовать их свойства.
Например:-
//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 как на объекты, в swift вы не можете передать строковый объект по ссылке через переменную. Swift всегда будет передавать новую копию строки. Следовательно, строки более часто называются типами значений в swift. На самом деле два строковых литерала не будут идентичны (===). Они рассматриваются как две разные копии.
let curious = ("ca" === "ca")
println("This will be false.. and the answer is..\(curious)")
Как вы можете видеть, мы начинаем отходить от традиционного подхода к строкам как к объектам и относиться к ним как к ценностям. Следовательно, .isEqualToString, который обрабатывался как оператор идентичности для строковых объектов, больше не является допустимым, поскольку вы никогда не сможете получить два одинаковых строковых объекта в Swift. Вы можете только сравнить его значение или другими словами проверить на равенство (==).
let NotSoCuriousAnyMore = ("ca" == "ca")
println("This will be true.. and the answer is..\(NotSoCuriousAnyMore)")
Это становится более интересным, когда вы смотрите на изменчивость строковых объектов в swift. Но это для другого вопроса, другого дня. Что-то, что вы, вероятно, должны изучить, потому что это действительно интересно. :) Надеюсь, это прояснит ситуацию. Ура!
===
это операторы тождественности, тогда как оператор==
равенства (по умолчанию вызовisEqual:
NSObject и его подклассов)