2016-04-12 19 views
0

Ich versuche, bestimmte Informationen aus dem Stripe-Objekt anfügen, aber ich bekomme den Fehler Ambiguous use of subscript. Wie repariere ich es? Ich habe mehr als eine Karte in Stripe gespeichert, und wenn ich Erfolg drucke, bekomme ich alle Informationen meiner Karten, ich posten die Konsole aus Sicherheitsgründen nicht. Er stürzt auch an der print(success![i]) LinieWie kann ich die Stripe-Informationen erhalten?

if let stripecust = object["Stripe"] as? String{ 
    PFCloud.callFunctionInBackground("Customer", withParameters: ["customerId" : stripecust]) { (success: AnyObject?, error: NSError?) -> Void in 
      if(error == nil){ 
       print(success) 

    for(var i = 0; i < success?.count; i++){ 
print(success![i]) //crashes here with error "fatal error: unexpectedly found nil while unwrapping an Optional value" 
      if let type = success!["data"] as? [[String:AnyObject]] //error here { 
       self.cardtype.append(String(type[i]["brand"]!)) 

} 

    if let numbercard = success!["data"] as? [[String:AnyObject]] //error here { 

    self.lastfour.append(String((numbercard[i]["last4"]!))) 

} 

if let holdercard = success!["data"] as? [[String:AnyObject]] //error here{ 

self.cardholder.append(String(holdercard[i]["name"]!)) 

} 



    } 


    }else{ 
    print(error) 
        } 
       } 
      } 
     } 
    }) 
} 

Antwort

0

Sie hier mindestens zwei Probleme.

Ihre Blockdeklaration gibt uns den Typ success: AnyObject?, also success ist eine optionale AnyObject und das ist alles, was wir davon ausgehen können.

  1. Überall, wo Sie verwenden success! Sie kraft auszupacken sind, dass optional, erklärt, dass Sie wissen es wird nicht gleich Null an diesem Punkt sein. Ihr unexpectedly found nil while unwrapping an Optional value Fehler zeigt, dass dies keine sichere oder gültige Annahme ist. Es scheint Fälle gibt es, wenn error ist Null, aber success ist auch Null. Sie müssen damit umgehen oder zumindest sorgfältiger darauf achten (Wächteranweisungen und optionale Bindung sind großartige Werkzeuge für diese Art der Überprüfung).
  2. success!["data"] as? [[String:AnyObject]] ist keine gültige Aussage gegeben, dass success hat Typ AnyObject?. AnyObject unterstützt den Subscript-Operator nicht. Es ist möglich, dass success auch von einem spezifischeren Typ ist, der Subscripting unterstützt, aber im Moment gibt es keine Möglichkeit für den Compiler (oder diejenigen von uns, die Ihre Frage lesen), dies zu wissen. Es sieht aus wie success ein Wörterbuch mit einem String ist „Daten“ -Taste so eine Möglichkeit wäre, es zu werfen, bevor Sie einen Index verwenden:

if 
    let successDictionary = success? as? [String: AnyObject], 
    let data = successDictionary["data"] as? [[String: AnyObject]] 
{ 
    ... 
} 
Verwandte Themen