2017-07-25 43 views
1

我有下面的代碼將值四捨五入到任何最接近的數字:調用具有相同名稱爲自定義功能的內置函數

func round(_ value: Double, toNearest nearest: Double) -> Double { 
    let roundedValue = round(value/nearest) * nearest 
    return roundedValue 
} 

不過,我得到以下投訴,因爲我用的是相同的這個方法的名稱爲內置的:

Missing argument for parameter 'toNearest' in call 

有沒有辦法解決這個問題?即builtin round(value/nearest)

謝謝。

+1

您是否嘗試過'Darwin.round(價值/最近)'? – OOPer

+1

供參考具有通過其簽名進行區分的具有相同名稱的多個函數稱爲函數重載。 – Balanced

+0

相關:[Swift 3.0:調用全局func min (T,T)時數組或字典擴展中的編譯器錯誤](https://stackoverflow.com/q/39602298/2976878)&[Xcode 8 Beta 4 Swift 3 - 「圓」行爲改變](https://stackoverflow.com/q/38767635/2976878) – Hamish

回答

1

如在下面的答案所示:

最達爾文/ C舍入現在的方法很容易得到作爲本機夫特方法,符合FloatingPoint(例如DoubleFloat)類型。這意味着如果您設置爲使用與您的問題中相同的邏輯來實現自己的舍入方法,則可以使用rounded() method of FloatingPoint,它使用.toNearestOrAwayFromZero舍入規則,該舍入規則等同於(在鏈接答案中描述的)舍入規則達爾文/ C round(...)方法。

適用於修改自定義round(_:toNearest:)功能:

func round(_ value: Double, toNearest nearest: Double) -> Double { 
    return (value/nearest).rounded() * nearest 
} 
+0

這是一種魅力。謝謝您的回答。 – Alex

0

爲什麼你需要相同的名稱,你不能只是將它重命名爲roundTo():p。

我相信你可以有兩個同名的函數,只要它們有不同的類型或參數標籤。嘗試更改參數?

相關問題