【问题标题】:What are 3 items in a Swift method parameter for?Swift 方法参数中的 3 项是什么?
【发布时间】:2015-01-02 03:22:44
【问题描述】:

例子:

mutating func moveByX(deltaX: Double, y deltaY: Double)

第一个参数接受一个 Double 并将其保存在该方法范围中为 deltaX。但是,y 和 deltaY 是什么?

我读了这篇文章,但找不到任何关于它的信息:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Methods.html

【问题讨论】:

  • 只有两个参数,其中一个有外部名称。

标签: swift


【解决方案1】:

这就是 Swift 模仿 Objective C 的命名参数(参数的伪命名)的方式。它很容易分解。

mutating func moveByX(deltaX: Double, y deltaY: Double)
                1        2      3     4   5       6
  1. 方法名称的开头
  2. 第一个参数名称
  3. 第一个参数类型
  4. 方法名称的第二部分
  5. 第二个参数名称
  6. 第二个参数类型

在本例中,该方法实际上被称为moveByX:y: 等效的Objective C 方法定义如下所示。

- (void)moveByX:(Double)deltaX y:(Double)deltaY

调用此方法时,名称的第二部分单独包含在其余参数中。

var dub = Double(0.5)
moveByX(dub, y: dub)

【讨论】:

  • 我对 Objective-C 不熟悉。我刚刚用 Swift 开始了 iOS。那么这种做事方式是可选的吗?
  • @user83039 您不必像这样命名函数,但我们鼓励这样做。这些方法应该是自我记录和描述性的。
【解决方案2】:

在你的例子中,

如果你熟悉 Objective-C,这对应一个方法,声明如下:

-(void)moveByX:(double)deltaX y:(double)deltaY;

【讨论】:

  • 只是好奇,这不是更具可读性吗? -(void)moveByX:(double)deltaX moveByY:(double)deltaY;
  • @SamB 外部名称背后的想法是使调用“读起来像英语”。在Y 前面重复moveBy 会让我们离那个目标更远。
【解决方案3】:

swift 中的方法有一个外部参数名和一个本地参数名。先定义外部然后再定义外部,如果只定义一个,则 swift 编译器会使用默认值。

默认情况下,Swift 为方法中的第一个参数名称提供本地参数名称,并默认为第二个和后续参数名称提供本地和外部参数名称。

在示例中,“y”是调用方法时使用的外部参数,“deltaY”是该函数内部计算中使用的变量名。

您也可以使用 _ 来表示您不希望参数具有外部名称。 # 用于当您的外部名称和内部名称相同时的简写。

例子

1)

func exampleFunction(externalVarName1 localVarName1: Int, externalVarName2  localVarName2: Int) {}

这样称呼:

 exampleFunction(externalVarName1: 0, externalVarName2: 0)

2)

func exampleFunction2(autocompleteHintName: Int, autocompleteHintName2: Int) {}

这样称呼

exampleFunction2(0, 0)

3)

func exampleFunction3(#nameForBoth: Int, #nameForBoth2: Int) {}

这样称呼

exampleFunction3(nameForBoth: 0, nameForBoth2: 0)

4)

func exampleFunction4(nameForBoth nameForBoth: Int, nameForBoth2 nameForBoth2: Int) {}

与 3) 相同,但会抛出 # 简写可以使用的警告。这样称呼

exampleFunction4(nameForBoth: 0, nameForBoth2: 0)

5)

func exampleFunction5(_: Int, _: Int) {}

这样称呼

 exampleFunction5(0, 0)

【讨论】:

    【解决方案4】:

    deltaX 和deltaY 是编写函数时的参数名称。但是,当您调用该函数时,它将被称为movebyX(val, y: val),其中val 被您传递给函数的 Double 替换。中间的 y 本质上是为了帮助函数在被调用时的可读性,并且是 swift 中的常见做法,以使您的代码尽可能可读(调用您的函数的人可以很容易地知道每个参数是什么而无需查看函数标题)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 2013-01-22
      • 2019-04-15
      • 2016-07-27
      相关资源
      最近更新 更多