比较 Swift 中的字符串对象
Posted
技术标签:
【中文标题】比较 Swift 中的字符串对象【英文标题】:Comparing String Objects in Swift 【发布时间】:2014-12-06 16:45:05 【问题描述】:每个人都知道您可以使用 == 运算符来比较事物。
if (stringValue1 == stringValue2)
如果您在 Objective-C 中执行此操作,程序将检查这些对象是否相同,而不是如果两个字符串确实包含相同的文本。如果要比较文本值,则需要使用 compare-Method。
据我了解,Swift 中的相同代码确实比较了文本值。那很好。很多编程语言都是这样工作的。但是我必须做些什么来检查这两个值是否引用同一个对象?
【问题讨论】:
【参考方案1】:对于类类型的对象,您可以使用===
运算符来检查两个对象是否引用同一个实例。但是,您专门询问字符串。 swift 中的字符串不是类类型——它们是值。 ===
运算符不适用于它们 - 就像它不适用于整数一样。所以你的问题的答案 - 如何检查两个字符串是否是同一个实例 - 在 Swift 中是:这是不可能的。对于 Swift 中的字符串,您应该只使用 ==
等普通运算符。
【讨论】:
呃,没错!我是个白痴说===。删除那个错误的答案。【参考方案2】:你不能因为字符串是值类型,而不是对象类型。 ===
运算符仅适用于(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?
^
【讨论】:
以上是关于比较 Swift 中的字符串对象的主要内容,如果未能解决你的问题,请参考以下文章
如何比较 Swift 中的字符?我有带有文本和 UITextField 的 UILabel