swift中二进制表达式的问题

时间:2014-06-23 10:42:24

标签: swift ios8 xcode6

我想知道Equal(==)和相同(===)表达式之间的区别。也是为什么我们使用模式匹配(〜=)表达式。我在哪里可以使用这些表达式。任何人都可以解释。提前谢谢。

我的示例代码是:

  var sample1 = "Steve jobs"
  var sample2 = "Steve jobs"
  sample1 === sample2 ? println("Its Equal"):println("Not equal") //result "Not equal"

 var sample3 = "Steve jobs"
 var sample4 = "Steve jobs"
 sample3 == sample4 ? println("Its Equal"):println("Not equal")//result "Its Equal"

总是欢迎使用其他具有良好示例的二进制表达式。我认为在目标c中不存在模式匹配。

4 个答案:

答案 0 :(得分:1)

来自Docs

  

Swift还提供了两个身份运算符(===和!==),用于测试两个对象引用是否都引用相同的对象实例

在您的情况下,sample1sample2具有不同的实例

答案 1 :(得分:1)

显然,sample1sample2是两个不同的字符串实例,因此sample1 === sample2会产生false(因为它们不是同一个对象)

另一方面,sample3和sample4是EQUAL STRINGS,因此sample3 == sample4产生true(因为这两个实例代表相同的字符串)

答案 2 :(得分:1)

首先是"不等于"因为sample1和sample2具有相同的内容,但是是两个不同的对象。

第二是"它的平等"因为samle3和sample4具有相同的内容。

==代表"按价值比较"或比较内容

===代表"通过引用比较"或确保两个引用指向同一个对象。

答案 3 :(得分:1)

您编写的示例甚至无法编译

enter image description here

这是因为===仅为对象类型定义,但Swift String值类型

通常,这意味着两个对象intances是同一个实例。而==检查内容是否相等。

您只能将===用于对象类型为NSString的实例:

var sample1: NSString = "string1"
var sample2: NSString = "string1"

sample1 === sample2  //false

模式匹配表达式~=switch - case控制语句使用。 switch(value)定义了一个值,每个case pattern:定义了一个匹配的模式。每个~=调用case函数来决定是否应该执行case语句。