2015-10-22 3 views
0

Il y a une fonction est imbriquée dans une fonction, la fonction intérieure avec des valeurs de paramètres par défaut, saillir comme ceci:Impossible de renvoyer une fonction avec le paramètre par défaut des valeurs

let myStr = returnStr() 
func returnStr() -> (String) ->(){ 
    var str = "hello" 
    func innerFunc(s: String = "test"){ 
     str += s 
     print(str) 
    } 
    return innerFunc 
} 

Je peux invoquer myStr("world"), mais peut » t appeler myStr() avec la valeur de paramètre par défaut. Est-ce correct? Je n'ai pas trouvé de documents disent que ce n'est pas la fonction de retour de soutien avec des valeurs de paramètres par défaut. Lors de l'appel myStr(), il y a une erreur "Argument manquant pour le paramètre # 1 dans l'appel". Y a-t-il un moyen de faire fonctionner ces deux utilisations?

Répondre

1

Parce que la signature de innerFunc est String->Void

chaque fois que vous déclarez . x sera toujours le type String->Void.

Lorsque vous fournissez des paramètres par défaut, il ne génère pas un autre type comme Void->Void,


Par exemple

func sayHello(name: String, to otherName: String = "my self", excited: Bool = false){ 
    // do something 
} 

let x = sayHello // x is (String, to: String, excited: Bool) -> Void 
+0

oui, je pense que vous avez raison, merci beaucoup. – pyanfield