2016-04-12 31 views
0

Şerit nesnesinden belirli bilgileri eklemeye çalışıyorum, ancak Ambiguous use of subscript hatasını alıyorum. Nasıl düzeltebilirim? Şeritte depolanmış birden fazla kartım var ve başarıyı yazdırdığımda kartların tüm bilgilerini alıyorum, güvenlik nedenleriyle konsolu yayınlamıyorum. Ayrıca print(success![i]) hattı Burada en az iki sorun varŞerit bilgilerini nasıl alabilirim?

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

cevap

0

de çöker.

Blok bildiriminiz bize success: AnyObject? türünü verir, bu nedenle success isteğe bağlı bir AnyObject ve bunu üstlenebileceğimiz tek şey budur.

  1. kullandığınız her yerde

    success! sen, o isteğe bağlı zorla unwrapping Eğer bu noktada sıfır olmayacaktır biliyorum beyan edilmektedir. Sizin unexpectedly found nil while unwrapping an Optional value hata, bunun güvenli ya da geçerli bir varsayım olmadığını gösterir. error'un nil olduğu ancak success'un da sıfır olduğu durumlar vardır. Bunu halletmeniz ya da en azından dikkatli bir şekilde kontrol etmeniz gerekir (koruma beyannameleri ve isteğe bağlı ciltleme bu tür kontroller için harika araçlardır).
  2. success!["data"] as? [[String:AnyObject]], success ürününün AnyObject? ürününe sahip olduğundan geçerli bir ifadedir. AnyObject, abone operatörünü desteklemiyor. success'un, aboneliği destekleyen daha özel bir tür olması da mümkündür, ancak şu anda derleyicinin (veya sorunuzu okuyanların) bunu bilmesinin bir yolu yoktur.

if 
    let successDictionary = success? as? [String: AnyObject], 
    let data = successDictionary["data"] as? [[String: AnyObject]] 
{ 
    ... 
} 
: success "veri", anahtar böylece bir seçenek simge kullanmaya başlamadan önce Döküm olacaktır String ile bir sözlük gibi görünüyor