比较 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

如何从解析中的对象中获取 ObjectId 并在 swift 中将其呈现为字符串

Swift3.0语言教程比较判断字符串

在表格视图控制器iOS swift中搜索特定记录

为啥 Swift 中的字符串、数组和字典改为值类型

java中的String类 字符串拆分成字符串数组 判定邮箱地址 字符串比较 看结果?