2016-04-12 26 views
0

ストライプオブジェクトから特定の情報を追加しようとしていますが、エラーAmbiguous use of subscriptが発生しています。どうすれば修正できますか?ストライプに複数のカードが格納されています。カードの情報をすべて表示していますが、セキュリティ上の理由からコンソールをポストしていません。 print(success![i])行でもクラッシュするストライプ情報を取得するにはどうすればよいですか?

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) 
        } 
       } 
      } 
     } 
    }) 
} 

答えて

0

ここでは少なくとも2つの問題があります。

ブロックの宣言では、タイプsuccess: AnyObject?が得られます。したがって、はです。これはすべてのことを想定しています。どこでもあなたは力アンラップオプション、あなたはそれがその時点ではnilではありませんを知っと宣言していることですsuccess!使用

  1. unexpectedly found nil while unwrapping an Optional valueエラーは、これが安全でないか、または正当な前提ではないことを示しています。 errorがnilですが、successもnilである場合があります。それを処理するか、少なくともそれをも​​っと慎重にチェックする必要があります(ガードステートメントとオプションのバインディングは、このようなチェックのための素晴らしいツールです)。
  2. success!["data"] as? [[String:AnyObject]]は、successのタイプがAnyObject?であるという有効な記述ではありません。 AnyObjectは添え字演算子をサポートしていません。 successもサブスクリプトをサポートするより具体的なタイプである可能性がありますが、コンパイラ(またはあなたの質問を読んでいる人)がそのことを知る方法はありません。

if 
    let successDictionary = success? as? [String: AnyObject], 
    let data = successDictionary["data"] as? [[String: AnyObject]] 
{ 
    ... 
} 
:それはsuccessのように見えることはとても1つのオプションの添字を使用する前に、それをキャストすることです文字列「データ」キーで辞書です
関連する問題