2016-12-27 53 views
-2

我正在使用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) 
} 

我希望有人对我的问题有一个解释/解决方案。

谢谢,卢卡斯

回答

0

这取决于版本的斯威夫特。

  • 在夫特第一参数标签是省略
  • In Swift 第一个参数标签是需要
0

由于vadian说,这改变了斯威夫特3.

我会忽略斯威夫特2,因为它已被替换斯威夫特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