0

我想知道我们如何在 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" 

请问有什么想法吗?

4

2 回答 2

1

尝试:

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

userInfo是一个可选的类型字典,[NSObject: AnyObject]?所以你需要解开它。字典查找总是返回一个可选的(因为键可能不存在),因此您必须在访问嵌套字典的键之前对其进行解包。使用 a?而不是!可选链接nil,如果"error"密钥不存在,它将无害地导致(而不是在使用 a 时崩溃!)。最后,您需要将结果转换为String(from AnyObject) 以便能够将其与"OAuthException".

于 2015-07-19T10:54:09.103 回答
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
                }
            }


        }
于 2015-07-19T11:43:26.833 回答