大家都知道你可以使用==運算符來比較事物。在Swift中比較字符串對象
if (stringValue1 == stringValue2)
如果你這樣做在Objective-C程序將檢查這些對象是相同的,如果沒有這兩個字符串確實包含相同的文字。如果您想比較文本值,則需要使用compare-Method。
據我瞭解,Swift中的相同代碼不會比較文本值。那很好。很多編程語言都是這樣工作的。但是,我需要做什麼來檢查這兩個值是否指向同一個對象?
大家都知道你可以使用==運算符來比較事物。在Swift中比較字符串對象
if (stringValue1 == stringValue2)
如果你這樣做在Objective-C程序將檢查這些對象是相同的,如果沒有這兩個字符串確實包含相同的文字。如果您想比較文本值,則需要使用compare-Method。
據我瞭解,Swift中的相同代碼不會比較文本值。那很好。很多編程語言都是這樣工作的。但是,我需要做什麼來檢查這兩個值是否指向同一個對象?
對於類類型的對象,您可以通過===
運算符來檢查兩個對象是否引用同一個實例。但是,你特別要求字符串。快速字符串不是班級類型 - 它們是值。 ===
運算符將不會爲它們工作 - 就像它不適用於整數一樣。所以你的問題的答案 - 如何檢查兩個字符串是否是相同的實例 - 在Swift中是:這是不可能的。在Swift中使用字符串時,只能使用正常運算符,如==
等。
你不能像字符串是值類型,而不是對象類型。 ===
運算符僅適用於對象類型(的AnyObject
),但String
的類型爲Any
。
6> "abc" === "abc"
repl.swift:6:1: error: type 'String' does not conform to protocol 'AnyObject'
"abc" === "abc"
^
Swift.lhs:1:5: note: in initialization of parameter 'lhs'
let lhs: AnyObject?
^
6> var str : String = "abc"
str: String = "abc"
7> str === str
repl.swift:7:1: error: type 'String' does not conform to protocol 'AnyObject'
str === str
^
Swift.lhs:1:5: note: in initialization of parameter 'lhs'
let lhs: AnyObject?
^
呃,沒錯!我是一個說===的白癡。刪除那個不好的答案。 – 2014-12-06 17:00:50