缺少参数标签

时间:2016-12-27 21:45:55

标签: ios swift

我正在使用UIBezierPath在Swift中处理一些表情。 在类中调用以下函数 - 因此被视为方法。 由“pathForEye”调用的函数“getEyeCenter”需要“eye:eye”作为输入参数。我不明白为什么。在我看来,“眼睛”应该足够了吗?!

当我在Swift中将其更改为“eye:eye”时,下一行中出现错误,需要“pathForCircleCenteredAtPoint(midPoint:eyeCenter,...)”。 为什么程序需要这个语法用于函数的第一个参数?

private enum Eye {
case Left
case Right
}   
 private func getEyeCenter (eye:Eye) -> CGPoint
{
    let eyeOffset = skullRadius / Ratios.SkullRadiusToEyeOffset
    var eyeCenter = skullCenter
    eyeCenter.y -= eyeOffset
    switch eye {
    case .Left: eyeCenter.x -= eyeOffset
    case .Right: eyeCenter.x += eyeOffset
}
    return eyeCenter
}

private func pathForEye (eye: Eye) -> UIBezierPath
{
    let eyeRadius = skullRadius / Ratios.SkullRadiusToEyeRadius
    let eyeCenter = getEyeCenter(eye) // **here Swift wants "eye: eye "** 
    return pathForCircleCenteredAtPoint(eyeCenter, withRadius: eyeRadius)
}

我希望有人能解释我的问题。

谢谢,Lukas

2 个答案:

答案 0 :(得分:0)

这取决于Swift的版本。

  • 在Swift 2 中,第一个参数标签被忽略
  • 在Swift 3 中,第一个参数标签是必需

答案 1 :(得分:0)

正如vadian所说,这在Swift 3中发生了变化。

我将忽略Swift 2,因为它已被Swift 3取代以进行新的开发。

函数具有内部和外部参数名称。

默认情况下,函数对内部和外部参数名称使用相同的名称。所以:

private func getEyeCenter (eye:Eye) -> CGPoint

相同
private func getEyeCenter (eye eye:Eye) -> CGPoint

如果您希望能够使用

进行调用 您需要

getEyeCenter(myEye)而不是getEyeCenter(eye: myEye) 使用空的外部参数名称声明它:

private func getEyeCenter (_ eye:Eye) -> CGPoint