2017-06-17 2 views
2

Meine Absicht ist folgende:Gibt es eine Möglichkeit, Funktionen mit demselben Namen, aber unterschiedlichen Rückgabetypen zu verwenden?

Meine erste Funktion:

public mutating func replaceSubstringInRange(_ range: CountableClosedRange<Int>, withString string: String) -> String 

, dass ich es in einem Kontext von print() zum Beispiel verwenden kann.

Und meine zweite:

public mutating func replaceSubstringInRange(_ range: CountableClosedRange<Int>, withString string: String) -> Void 

nur für etwas zu ändern.

Ich weiß, dass es eine andere Funktion Signatur benötigt, aber gibt es einen besseren Weg?

+0

Nein, aber Sie können eine Funktion verwenden, die 'String' zurückgibt, als wäre sie' Void'. – dasblinkenlight

+0

Das klingt perfekt. Wie kann ich das erkennen? –

+0

Rufen Sie es einfach an und weisen Sie das Ergebnis keiner Variablen zu. Swift lässt dich das machen. – dasblinkenlight

Antwort

2

Sie können nicht zwei Funktionen mit identischen Parametertypen definieren ohne eine Mehrdeutigkeit zu erzeugen, aber Sie können eine Funktion aufrufen, die einen Wert zurückgibt, als wäre es Void. Dies erzeugt eine Warnung, die Sie stilllegen können, indem Sie Ihr Funktionsergebnis discardable angeben:

@discardableResult 
public mutating func replaceSubstringInRange(_ range: CountableClosedRange<Int>, withString string: String) -> String { 
} 
+0

Das ist es. Vielen Dank! –

4

Sie können zwei Funktionen mit demselben Namen, denselben Parametern und unterschiedlichen Rückgabetypen verwenden. Aber wenn Sie diese Funktion aufrufen und geben keine Ahnung zu Compiler, die Funktion der beiden zu nennen, dann gibt es Mehrdeutigkeit Fehler,

Beispiele:

func a() -> String { 
    return "a" 
} 

func a() -> Void { 
    print("test") 
} 


var s: String; 
s = a() 
// here the output of a is getting fetched to a variable of type string, 
// and hence compiler understands you want to call a() which returns string 

var d: Void = a() // this will call a which returns void 

a() // this will give error Ambiguous use of 'a()' 
+1

Dies sollte als gültige Antwort erkannt werden. Die Funktionssignatur umfasst auch den zurückkehrenden Typ. – user3441734

Verwandte Themen