【问题标题】:What does this function syntax mean?这个函数语法是什么意思?
【发布时间】:2016-10-26 13:32:05
【问题描述】:

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

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

谁能解释一下这是什么意思?还是做?

谢谢!

【问题讨论】:

  • 查看link 并检查等价运算符部分。
  • 它重载了比较运算符==,因此它也可以应用于Dream类型的实例。

标签: ios iphone swift function methods


【解决方案1】:

查看Swift Comparison Protocols

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

您在此处列出的代码意味着:

当且仅当它们的 descriptioncreatureeffectsnumberOfCreatures 相同时,两个 Dream() 类是等价的。

【讨论】:

    【解决方案2】:

    这是一个运算符。它允许您使用更简洁的语法而不是函数调用来使用函数。

    在这种情况下,它看起来可以让你比较梦想。

    let dream1 = Dream()
    let dream2 = Dream()
    
    if dream1 == dream2 {
        // The dreams are equal.
    }
    

    【讨论】:

      【解决方案3】:

      Swift 有一个== 运算符,它显示两个事物是否相等:

      if x == 1 {
          // ... do stuff ...
      }
      

      但很酷的是这个操作符——以及所有 Swift 操作符——只是一个普通的函数,在本例中是一个名为 == 的函数。当你说

      x == 1
      

      真正发生的是这个函数被调用了。伪语法是:

      ==(x, 1)
      

      ...所以这里我们将两个 Int 值传递给 == 函数进行比较,该调用的结果是一个 Bool。

      好的,到目前为止你和我在一起吗?好吧,Swift 也有重载的函数。这意味着我们可以重新定义 == 以应用于我们自己创建的参数类型。因此,如果我们有 Dream 类型,我们可以说出 == 应用于两个 Dream 对象时的含义。你引用的代码就是你这样做的方式。

      【讨论】:

        【解决方案4】:

        比较两个对象(结构)是否相等。

        它被称为运算符重载。它也存在于 C++ 或其他语言中。这是一种奇特的说法,您可以使 +、-、/ 或 * 等运算符适用于您想要的任何类型!如果您觉得特别有创意,您甚至可以定义自己的运算符。

        欲了解更多信息,https://www.raywenderlich.com/80818/operator-overloading-in-swift-tutorial

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-07-25
          • 2011-11-13
          • 2014-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多