这个函数语法是什么意思?

时间:2016-06-24 02:32:12

标签: ios iphone swift function methods

我正在练习使用一些Apple示例代码,我看到了以前从未见过的这个功能。它似乎没有名字,而是两个==标志?!

func ==(_ lhs: Dream, _ rhs: Dream) -> Bool {
return lhs.description == rhs.description &&
       lhs.creature == rhs.creature &&
       lhs.effects == rhs.effects &&
       lhs.numberOfCreatures == rhs.numberOfCreatures
}

有人可以解释一下这是什么意思吗?或者呢?

谢谢!

4 个答案:

答案 0 :(得分:2)

查看Swift Comparison Protocols

通常,它可以比较两个类或两个结构。因为当你比较两个类时,它会与内存地址进行比较,而不是内容。但是这个函数可以让你能够将两个类或结构与它们的内容进行比较。

您在此处列出的代码表示:

当且仅当Dream()descriptioncreatureeffects相同时,两个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