web-dev-qa-db-fra.com

Chaîne convertie en Int et remplace la virgule par le signe Plus

À 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

28
Chris
  1. Utilisez components(separatedBy:) pour séparer la chaîne séparée par des virgules.
  2. Utilisez trimmingCharacters(in:) pour supprimer les espaces avant et après chaque élément
  3. Utilisez Int() pour convertir chaque élément en entier.
  4. Utilisez compactMap (précédemment appelé flatMap) pour supprimer les éléments qui ne pourraient pas être convertis en Int.
  5. 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
    
61
vacawama

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)

29
David Seek

let myString = "556" let myInt = Int(myString)

5
neha