我正在练习使用一些Apple示例代码,我看到了以前从未见过的这个功能。它似乎没有名字,而是两个==标志?!
func ==(_ lhs: Dream, _ rhs: Dream) -> Bool {
return lhs.description == rhs.description &&
lhs.creature == rhs.creature &&
lhs.effects == rhs.effects &&
lhs.numberOfCreatures == rhs.numberOfCreatures
}
有人可以解释一下这是什么意思吗?或者呢?
谢谢!
答案 0 :(得分:2)
通常,它可以比较两个类或两个结构。因为当你比较两个类时,它会与内存地址进行比较,而不是内容。但是这个函数可以让你能够将两个类或结构与它们的内容进行比较。
您在此处列出的代码表示:
当且仅当Dream()
,description
,creature
,effects
相同时,两个numberOfCreatures
类才是等同的。
答案 1 :(得分:1)
它是一名运营商。它允许您使用更清晰的语法而不是函数调用来使用该函数。
在这种情况下,看起来它可以让你比较梦想。
let dream1 = Dream()
let dream2 = Dream()
if dream1 == dream2 {
// The dreams are equal.
}
答案 2 :(得分:1)
Swift有一个==
运算符,可以揭示两件事是否相等:
if x == 1 {
// ... do stuff ...
}
但很酷的是,这个运算符 - 以及所有Swift运算符 - 只是一个普通函数,在本例中是一个名为==
的函数。当你说
x == 1
真正发生的是调用此函数。伪语法将是:
==(x, 1)
...所以这里我们将==
函数交给两个Int值进行比较,并且该调用的结果是Bool。
好的,到目前为止你和我在一起吗?好吧,Swift也有重载的功能。这意味着我们可以重新定义 ==
以应用我们自己创建的参数类型。因此,如果我们有一个Dream类型,我们可以说明==
在应用于两个Dream对象时的含义。你引用的代码就是你如何做到的。
答案 3 :(得分:0)
比较两个对象(结构)是相等的。
它被称为运算符重载。它也存在于C ++或其他语言中。这是一种奇特的方式,说你可以使+, - ,/或*之类的运算符适用于你喜欢的任何类型!如果您感觉特别有创意,您甚至可以定义自己的运营商。
有关详细信息,请https://www.raywenderlich.com/80818/operator-overloading-in-swift-tutorial