2014-06-23 16 views
1

我想知道Equal(==)和相同(===)表达式之间的区别。此外,为什么我们使用模式匹配(〜=)表达式。我在哪里可以使用这些表达式。任何人都可以解释请。提前致谢。swift中的二进制表达式的问题

我的示例代码:

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中。

+1

'==='比较两个引用是否指向内存中的_same_实例; =='取决于实际的对象,但它通常用于比较实例的_values_。官方文档可以解释它,如果你阅读它:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/BasicOperators.html#//apple_ref/doc/uid/TP40014097-CH6 -XID_70 – holex

回答

1

你写的例子也不能将编译

enter image description here

那是因为===只定义对象类型但斯威夫特String值类型

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

可以使用===仅与NSString实例它们是对象类型:

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

sample1 === sample2 //false 

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

1

Docs

雨燕还提供了两个身份操作符(===和==!),你用它来测试两个对象的引用是否都指向同一个对象实例

在你的情况sample1sample2有不同的情况下

1

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

另手,样本3和样本4是相等的字符串,因此,sample3 == sample4产生true(因为这两个实例代表相同的字符串)

1

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

其次是“它的平等”,因为samle3和sample4具有相同的内容。

==代表“按值进行比较”或比较内容

===代表“通过参考进行比较”或确保两个引用都指向同一个对象。