2017-07-25 1 views
1

Ich habe den folgenden Code ein Wert jeder nächste Zahl gerundet:Aufruf der eingebauten Funktion mit dem gleichen Namen wie eine benutzerdefinierte Funktion

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

Allerdings habe ich die folgende Beschwerde erhalten, weil ich das gleiche verwenden Namen für diese Methode als builtin ein:

Missing argument for parameter 'toNearest' in call 

gibt es eine Möglichkeit, dies zu umgehen? d.h. builtin round(value/nearest)?

Danke.

+1

Haben Sie versucht, 'Darwin.round (Wert/nächste)'? – OOPer

+1

FYI Mehrere Funktionen mit demselben Namen, die sich durch ihre Signatur unterscheiden, werden als Funktionsüberladung bezeichnet. – Balanced

+0

Related: [Swift 3.0: Compiler-Fehler beim Aufruf von globalen func min (T, T) in Array oder Dictionary-Erweiterung] (https://stackoverflow.com/q/39602298/2976878) & [Xcode 8 Beta 4 Swift 3 - "Rundes" Verhalten geändert] (https://stackoverflow.com/q/38767635/2976878) – Hamish

Antwort

1

Wie in der folgenden Antwort gezeigt:

meisten Darwin/C Rundungsverfahren nun leicht verfügbar sind als native Swift Methoden, zu FloatingPoint konformen Typen (zB Double und Float) . Das heißt, wenn Sie Ihre eigene Rundungsmethode mit derselben Logik wie in Ihrer Frage implementieren, können Sie die rounded() method of FloatingPoint verwenden, die die Rundungsregel .toNearestOrAwayFromZero verwendet, die (wie in der verknüpften Antwort beschrieben) äquivalent zu Darwin/C round(...) Methode.

Angewandt Ihre benutzerdefinierten round(_:toNearest:) Funktion zu ändern:

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

Dies funktioniert ein Charme. Vielen Dank für Ihre Antwort. – Alex

0

Warum brauchen Sie den gleichen Namen können Sie nicht einfach umbenennen wie roundTo(): p.

Ich glaube, Sie können zwei Funktionen mit dem gleichen Namen haben, solange sie unterschiedliche Typen oder Parameterbezeichnungen haben. Versuchen Sie, die Parameter zu ändern?

Verwandte Themen