2016-04-12 2 views
0

Я пытаюсь добавить определенную информацию от объекта stripe, но я получаю ошибку 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

У вас есть по крайней мере две проблемы здесь.

Ваше объявление блока дает нам тип success: AnyObject?, поэтому success является необязательным AnyObject, и это все, что мы можем с этим поприметить.

  1. Везде вы используете success! вы принудительному разворачивания, что необязательно, заявив, что вы знаете не будет ноль в этой точке. Ваша ошибка unexpectedly found nil while unwrapping an Optional value показывает, что это не безопасное или допустимое предположение. Похоже, что есть случаи, когда error - ноль, но success - тоже нуль. Вам нужно обработать это или, по крайней мере, проверить его более тщательно (защитные инструкции и необязательное связывание - отличные инструменты для такого рода проверки).
  2. success!["data"] as? [[String:AnyObject]] не является действительным с утверждением, что success имеет тип AnyObject?. AnyObject не поддерживает индексный оператор. Возможно, что success также относится к более конкретному типу, поддерживающему подписи, но прямо сейчас нет возможности для компилятора (или тех из нас, кто читает ваш вопрос), чтобы это знать. Похоже success это словарь с String «данные» ключ поэтому один из вариантов было бы бросить его, прежде чем пытаться использовать индекс:

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