如何从 Swift 中的 error.userInfo 获取 ["error"]["type"]?
Posted
技术标签:
【中文标题】如何从 Swift 中的 error.userInfo 获取 ["error"]["type"]?【英文标题】:How to get ["error"]["type"] from error.userInfo in Swift? 【发布时间】:2015-07-19 09:34:42 【问题描述】:我想知道我们如何在 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"
有什么想法吗?
【问题讨论】:
能否告诉我们您使用的是哪个 XCode 版本? 你需要像error.(userInfo as [String] [String])[...]
一样投你的userinfo
【参考方案1】:
试试:
if (error.userInfo?["error"]?["type"] as? String) == "OAuthException"
userInfo
是[NSObject: AnyObject]?
类型的可选字典,因此您需要打开它。字典查找总是返回一个可选的(因为键可能不存在),因此您必须在访问嵌套字典的键之前对其进行解包。使用?
而不是!
是可选链接,如果"error"
键不存在,它会无害地导致nil
(如果您使用!
而不是崩溃)。最后,您需要将结果转换为 String
(来自 AnyObject
),以便能够将其与 "OAuthException"
进行比较。
【讨论】:
这不起作用,仍然是相同的错误消息。不过谢谢 我刚刚查了一下。userInfo
是 [NSObject: AnyObject]?
类型,所以你也需要打开它。我已经更新了我的答案。
我可以知道你在哪里看的吗?
option-click 是你的朋友。我在 Playground 中输入了let u = NSError().userInfo
,然后单击了userInfo
,弹出窗口告诉了类型。
我不确定它何时更改,但 NSError.userInfo 不再是可选的。【参考方案2】:
如何分解错误和类型如下所示?
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
【讨论】:
以上是关于如何从 Swift 中的 error.userInfo 获取 ["error"]["type"]?的主要内容,如果未能解决你的问题,请参考以下文章