2016-05-14 17 views
1

Ziel: Wenn die Eingabe in Text1 einstimmt mit einem Wert in superDictionary, dann ein zweites Wörterbuch (das mit diesem Wert entspricht, der angepaßt) ist es Werte, die durch den Zahlenwert in num1 WHEN button1 vervielfacht gedrückt wird (ein Schluck ich weiß)Wert aus einem Wörterbuch in Swift Extrahierung

zB Wenn text1.text = "apple" (was mit einem Wert in superDictionary übereinstimmt) (siehe Code unten), leitet mich diese Übereinstimmung zu appleDictionary weiter, wobei jeder Eintrag dann mit dem Zahlenwert in num1 multipliziert wird (zB 5), wenn button1 ist gedrückt.

Das Problem: Ich weiß nicht, was Syntax, dies zu tun zu verwenden!

Mein IBOutlets und IBActions sind wie folgt: im Voraus

@IBOutlet weak var text1: UITextField! 

@IBOutlet weak var num1: UITextField! 

var superDictionary = ["apple","banana"] 

var appleDictionary = ["fibre": 1, "water": 2] 

@IBAction func button1(sender: AnyObject) {} 

Dank

Antwort

1

würde ich vorschlagen, dass Sie Ihre Wörterbücher kombinieren und eine echte superDictionary machen:

var superDictionary = ["apple": ["fibre": 1, "water": 2], "banana": ["potassium": 2, "water": 2]] 

dann Ihre Taste Aktion wäre etwa so:

@IBAction func button1(sender: AnyObject) { 
    guard let num = Int(num1.text ?? "") else { return } 
    guard let text = text1.text else { return } 
    guard var dict = superDictionary[text] else { return } 

    for (key, value) in dict { 
     dict[key] = value * num 
    } 

    superDictionary[text] = dict 
} 

Hinweise:

  • Die erste Schutzerklärung extrahiert num aus dem num1 Textfield. Wenn das Textfeld nilNull Koaleszenz-Operator?? ist, verwandelt es sich in eine leere String, die Int macht in nil. Wenn es eine Zeichenfolge, die erfolgreich auf eine Int umgewandelt werden kann, die guard Anweisung erfolgreich und weist sie num, da sonst die Funktion zurückkehrt.
  • Die zweite guard-Anweisung weist die Zeichenfolge in text1.text der text zu oder gibt zurück, wenn das textField nil ist.
  • Die dritte guard Anweisung weist den richtigen Wörterbuch zu dict wenn es vorhanden ist, oder gibt, wenn es kein solches Wörterbuch ist. Diese guard verwendet var anstelle von let, weil wir dieses Wörterbuch ändern werden.
  • Die Schleife ändert das Wörterbuch durch Extrahieren von key/value Paaren und Ersetzen der value durch value * num.
  • Die endgültige Zuweisung ersetzt das Wörterbuch im superDictionary mit dem modifizierten ein.
Verwandte Themen