2015-07-19 2 views
0

Мне интересно, как мы это делаем в Swift?Как получить ["error"] ["type"] из error.userInfo в Swift?

Я пытаюсь преобразовать код в Swift

FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:nil]; 
    [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
     if (!error) { 
      // handle successful response 
     } else if ([[error userInfo][@"error"][@"type"] isEqualToString: @"OAuthException"]) { // Since the request failed, we can 
      NSLog(@"The facebook session error"); 
     } else { 
      NSLog(@"Some other error: %@", error); 
     } 
    }]; 

Вот что я сделал.

request.startWithCompletionHandler { (connection: FBSDKGraphRequestConnection!, result: AnyObject!, error: NSError!) -> Void in 
     if error == nil { 
      // handle successful response 
     } 
     else if error.userInfo["error"]["type"] == "OAuthException" { 
      //THIS LINE WONT COMPILE 

     } 
     else { 
      println("Some other error"); 
     } 
    } 

Но я получаю ошибку компиляции говорит, что could not find member 'subscript' на этой линии

error.userInfo["error"]["type"] == "OAuthException" 

Любые идеи, пожалуйста?

+0

Не могли бы вы сообщить нам, что XCode-версия вы используете? –

+0

Xcode version 6.4 – JayVDiyk

+0

Вам необходимо указать свою ошибку 'userinfo' как. (UserInfo as [String] [String]) [...]' –

ответ

1

Try:

if (error.userInfo?["error"]?["type"] as? String) == "OAuthException" { 

userInfo является необязательным словарь типа [NSObject: AnyObject]? поэтому вам нужно разворачивать его. Словарь поиска всегда возвращает необязательный (потому что ключ может не существовать), поэтому вам нужно развернуть его перед доступом к ключу вложенного словаря. Использование ? вместо ! является необязательным цепочкой, и это приведет к безобидному результату в nil, если ключ "error" не существует (вместо сбоя, если вы используете !). Наконец, вам нужно будет отдать результат String (от AnyObject), чтобы иметь возможность сравнить его с "OAuthException".

+0

Это не работает, все еще такое же сообщение об ошибке. спасибо, хотя – JayVDiyk

+0

Я просто посмотрел. 'userInfo' имеет тип' [NSObject: AnyObject]? ', поэтому вам также нужно развернуть его. Я обновил свой ответ. – vacawama

+0

Теперь он работает, спасибо – JayVDiyk

0

Как насчет разрушения ошибки и типа, показанного ниже?

  else if let errorOAuthException: AnyObject = error.userInfo as? Dictionary<String, AnyObject>{ 

      if errorOAuthException["error"] != nil { 
       if errorOAuthException["type"] as? String == "OAuthException" { 

       //Do something for me 
       } 
      } 


     } 

 Смежные вопросы

  • Нет связанных вопросов^_^