2017-06-17 1 views
2

Mon intention est la suivante:Existe-t-il un moyen d'utiliser des fonctions avec les mêmes noms mais différents types de retour?

Ma première fonction:

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

que je peux l'utiliser dans un contexte de print() par exemple.

Et mon deuxième:

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

juste pour modifier quelque chose.

Je sais qu'il existe une signature de fonction différente, mais y a-t-il un meilleur moyen?

+0

Non, mais vous pouvez utiliser une fonction renvoyant 'String' comme si elle était' Void'. – dasblinkenlight

+0

Cela semble parfait. Comment puis-je réaliser cela? –

+0

Appelez-le simplement, et n'assignez le résultat à aucune variable. Swift vous laissera le faire. – dasblinkenlight

Répondre

2

Vous ne pouvez pas définir deux fonctions avec les types de paramètres identiques sans créer d'ambiguïté, mais vous pouvez appeler une fonction renvoyant une valeur comme si elle était Void. Cela génère un avertissement, que vous pouvez réduire au silence en désignant votre résultat de fonction discardable:

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

C'est tout. Merci! –

4

Vous pouvez avoir deux fonctions avec le même nom, les mêmes paramètres et différents types de retour. Mais si vous appelez cette fonction et ne fournissent aucun indice de compilateur fonction des deux à appeler, il donne l'erreur d'ambiguïté,

Exemples:

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

Cela devrait être reconnu comme la réponse valide. La signature de fonction inclut également le type de retour. – user3441734