2016-12-27 56 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