À l'aide de Swift, j'essaie de prendre une liste de nombres saisis dans une vue texte dans une application et de créer une somme de cette liste en extrayant chaque nombre pour un calculateur de notes. La quantité de valeurs introduites par l'utilisateur change également à chaque fois. Un exemple est présenté ci-dessous:
Chaîne de: 98,99,97,96 ... Essayer d'obtenir: 98 + 99 + 97 + 96 ...
S'il vous plaît aider! Merci
components(separatedBy:)
pour séparer la chaîne séparée par des virgules.trimmingCharacters(in:)
pour supprimer les espaces avant et après chaque élémentInt()
pour convertir chaque élément en entier.compactMap
(précédemment appelé flatMap
) pour supprimer les éléments qui ne pourraient pas être convertis en Int
.Utilisez reduce
pour résumer le tableau de Int
.
let input = " 98 ,99 , 97, 96 "
let values = input.components(separatedBy: ",").compactMap { Int($0.trimmingCharacters(in: .whitespaces)) }
let sum = values.reduce(0, +)
print(sum) // 390
Pour Swift et Swift 4.
moyen simple: codé en dur. Utile uniquement si vous connaissez le nombre exact d'entiers à venir, souhaitant être calculé et imprimé/utilisé ultérieurement.
let string98: String = "98"
let string99: String = "99"
let string100: String = "100"
let string101: String = "101"
let int98: Int = Int(string98)!
let int99: Int = Int(string99)!
let int100: Int = Int(string100)!
let int101: Int = Int(string101)!
// optional chaining (if or guard) instead of "!" recommended. therefore option b is better
let finalInt: Int = int98 + int99 + int100 + int101
print(finalInt) // prints Optional(398) (optional)
manière élégante en tant que fonction: manière générique. Ici, vous pouvez mettre autant de chaînes que nécessaire. Vous pouvez, par exemple, rassembler toutes les chaînes en premier, puis utiliser le tableau pour les calculer.
func getCalculatedIntegerFrom(strings: [String]) -> Int {
var result = Int()
for element in strings {
guard let int = Int(element) else {
break // or return nil
// break instead of return, returns Integer of all
// the values it was able to turn into Integer
// so even if there is a String f.e. "123S", it would
// still return an Integer instead of nil
// if you want to use return, you have to set "-> Int?" as optional
}
result = result + int
}
return result
}
let arrayOfStrings = ["98", "99", "100", "101"]
let result = getCalculatedIntegerFrom(strings: arrayOfStrings)
print(result) // prints 398 (non-optional)
let myString = "556" let myInt = Int(myString)