2016-10-15 8 views
25

Mit Swift versuche ich, eine Liste von Zahlen einzugeben, die in einer Textansicht in einer App eingegeben werden, und eine Summe dieser Liste zu erstellen, indem jede Zahl für einen Notenrechner extrahiert wird. Auch die Anzahl der vom Benutzer eingegebenen Werte ändert sich jedes Mal. Ein Beispiel ist unten dargestellt:String in Int konvertieren und Komma in Pluszeichen ersetzen

String aus: 98,99,97,96 ... zu erhalten Versuch: 98 + 99 + 97 + 96 ...

Bitte um Hilfe! Dank

Antwort

54
  1. Verwenden components(separatedBy:) die kommagetrennte Zeichenfolge aufzubrechen.
  2. Verwenden Sie trimmingCharacters(in:), um Leerzeichen vor und nach jedem Element zu entfernen
  3. Verwenden Sie Int(), um jedes Element in eine ganze Zahl zu konvertieren.
  4. Verwenden Sie flatMap, um alle Elemente zu entfernen, die nicht in Int konvertiert werden konnten.
  5. Verwenden Sie reduce, um das Array von Int zusammenzufassen.

    let input = " 98 ,99 , 97, 96 " 
    
    let values = input.components(separatedBy: ",").flatMap { Int($0.trimmingCharacters(in: .whitespaces)) } 
    let sum = values.reduce(0, +) 
    print(sum) // 390 
    
29

Für Swift 3 und Swift 4.

Einfacher Weg: hart codiert. Nur nützlich, wenn Sie genau wissen, wie viele Ganzzahlen angezeigt werden, wie Sie berechnet und gedruckt/weiter verwendet werden sollen.

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)

Fancy Art und Weise als Funktion: Allgemein Weg. Hier können Sie am Ende so viele Strings einfügen, wie Sie benötigen. Sie könnten zum Beispiel zuerst alle Zeichenfolgen sammeln und dann das Array verwenden, um sie berechnen zu lassen.

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)

5

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

+1

Bitte fügen Sie eine Erklärung dafür, wie Ihr Code funktioniert. – brimstone

+0

und wie ist das anders als meine Antwort? –

Verwandte Themen