Bon, je viens de mettre à jour Xcode à 7.3 et maintenant j'ai cet avertissement :
Les paramètres "var" sont obsolètes et seront supprimés dans Swift 3.
Comment résoudre ce problème lorsque j'ai besoin d'utiliser le var dans cette fonction :
public func getQuestionList(var language: String) -> NSArray {
if self.data.count > 0 {
if (language.isEmpty) {
language = "NL"
}
return self.data.objectForKey("questionList" + language) as! NSArray
}
return NSArray()
}
6 votes
Et si
public func getQuestionList(inout language: String) -> NSArray
2 votes
Non, ce n'est pas un remplacement approprié. L'OP ne veut probablement pas
getQuestion
d'avoir des effets secondaires.6 votes
Honnêtement, je n'ai aucune idée de la raison pour laquelle ils envisageraient même de supprimer ça. C'était l'une des caractéristiques qui rendait Swift génial !
0 votes
Je ne l'ai jamais utilisé moi-même et je ne comprends pas toute cette agitation.
0 votes
@MikeTaverne (réponse tardive) Considérons la fonction suivante :
func foo(_ bar: int) { /*use bar*/ bar+=1; foo(bar); }
. C'est impossible sans var params. Vous devez soit créer une var séparée dans la fonction et copier la valeur, soit marquer le paramètre comme inout. La première solution est lente, la seconde entraîne un comportement indéfini. De nombreux algorithmes utilisent la récursion de cette manière.0 votes
@kevin Dans votre fonction, pourquoi ne pas simplement appeler
foo(bar + 1)
?0 votes
@MikeTaverne Parce que c'est un exemple simple, et que ce que vous suggérez n'est pas toujours une option. Et si
bar
n'est pas un int mais un objet complexe ?0 votes
@kevin Qu'est-ce qui vous fait penser qu'une telle variable intermédiaire ne serait pas optimisée ? Ou qu'entendez-vous par "lent" ?