Je prends un tableau de ([(chaîne de string)]) et je veux laisser tomber les 3 ou 5 derniers éléments de la chaîne non optionnelle, en fonction de la chaîne.
Si je sais que je ' m DÉPPUT 5 J'utilise p>
let strippedName = (data.map{
if ($0.1 == "a") {
return $0.1.first!
} else {
return $0.1.last!
}
} ).map{ String($0) }
3 Réponses :
Je pense que le problème est avec une fermeture anonimique et une inférence de type, cependant, pour obtenir ce que vous essayez dans votre deuxième morceau de code, vous pouvez utiliser un filtre au lieu de conditionnels. Avec cela, vous n'obtiendrez pas d'erreur: et vous pouvez ajouter droplast code> à la fin. P> p>
Une autre façon de résoudre est d'utiliser la réduction de la mise à jour forte> p> Essayer de résoudre ce problème en utilisant un Puisque le type de retour de la fermeture est défini pour être une chaîne, je n'ai pas besoin de faire un deuxième mappage p> si code> dans la cartographie. Pour mon exemple, j'utilise ici compactmap code> plutôt que plan code>, de cette façon tout ce qui ne satisfait pas la condition si code> sera exclu de la matrice. p>
Swift n'a pas pu déduire le type de retour de fermeture complexe, il vous montre donc l'erreur "l'utilisation ambiguë d'init ()"
Spécification du type de retour résout explicitement le problème. P>
let data: [(String?, String)] = [("a","bBCDEA"), ("b","a"), (nil,"CBCDEB"), ("d","aBCDEF"), (nil,"a"), ("f","FBCDEC")]
var strippedName = (data.map { tuple -> String.Element in
if (tuple.1 == "a") {
return tuple.1.first!
} else {
return tuple.1.last!
}
}).map{ String($0) }
print(strippedName) // ["A", "a", "B", "F", "a", "C"]
strippedName = (data.map{ ($0.1).dropLast(5) } ).map{ String($0) }
print(strippedName) // ["b", "", "C", "a", "", "F"]
Ceci est rapide, vous n'avez pas besoin d'utiliser () autour de vos conditions SWIFT, si tuple.1 == "A" { code> fonctionne bien. De plus, vous voudrez peut-être modifier vos données d'échantillon afin qu'au moins un élément satisfait à la condition de la réponse à la réponse.
Merci pour vos conseils. Par souci de clarté, il n'y a pas de mal à utiliser () autour des conditions. J'ai changé de données d'échantillonnage pour rendre la réponse plus claire.
Pouvez-vous montrer de l'exemple d'entrée et de sorties?
Votre exemple est un peu bizarre depuis que vous pourriez simplement retourner "A" lorsque vous obtenez un match et pourquoi forcer la déroulement lorsque le deuxième élément du tuple n'est jamais nul?
Ce qui n'est évidemment pas tout à fait l'article fini de mes besoins. Si l'exemple ne fonctionne pas (cela ne fonctionne pas), un exemple complet ne fonctionnera pas (ce n'est pas). Les détails sont triviaux et non pertinents; Je veux une instruction IF dans une fonction de carte.
Je comprends cela, mais cela rend difficile de comprendre la question. Si tel est tout ce qu'il y a, les réponses postées devraient-elles fonctionner, non?
Vous êtes révélé pour avoir mis des problèmes complets si elles ne sont pas faciles à comprendre. Vous écrivez ce que vous voulez, les gens ne lisent pas et font des commentaires. Je veux dire, la question est que je veux mettre une déclaration si sur une carte. J'ai mis à jour la question, mais je suis sûr qu'ils seront des problèmes avec des personnes qui voient qu'il y a un débit forcé maintenant.
Le contexte original a été là tout le temps: «Je prends un tableau de ([(chaîne)]) et souhaitez déposer les 3 ou 5 derniers éléments de la chaîne non optionnelle, en fonction de la chaîne. " J'en ai écrit à nouveau, sous le code.