我正在使用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
答案 0 :(得分:0)
这取决于Swift的版本。
答案 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