ที่จริงแล้วมันรู้สึกว่า 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 จะส่งสำเนาสตริงใหม่ล่าสุดเสมอ ดังนั้นสตริงจึงเป็นที่รู้จักกันทั่วไปว่าเป็นประเภทของค่าที่รวดเร็ว ความจริงแล้วตัวอักษรสตริงสองตัวจะไม่เหมือนกัน (===) พวกเขาจะถือว่าเป็นสองสำเนาที่แตกต่างกัน
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)")
สิ่งนี้น่าสนใจยิ่งขึ้นเมื่อคุณดูความผันแปรของวัตถุสตริงอย่างรวดเร็ว แต่นั่นเป็นคำถามอื่นวันอื่น บางสิ่งที่คุณน่าจะมองเข้าไปทำให้มันน่าสนใจจริงๆ :) หวังว่าจะเคลียร์ความสับสน ไชโย!
===
เป็นผู้ประกอบการตัวตนในขณะที่==
เป็นผู้ประกอบการความเท่าเทียมกัน (โดยโทรเริ่มต้นisEqual:
ใน NSObject และ subclasses ของมัน)