MFSAPIManager().registerNewUser(userFirstName!, lastName: userLastName!, userTypeId: 1, email: userEmail!, password: userPassword!, completionHandler: { (response) in
guard response.error == nil else {
if let error = response.error {
print(error)
}
dispatch_async(GlobalMainQueue) {
self.displayAlertViewController(title: "Error", message: "Der Benutzer konnte nicht registriert werden")
}
return
}
if let serverResponse = response.value as? Dictionary<String,AnyObject> {
let newUserReference = serverResponse["data"]!["userReference"]
if (newUserReference != nil) {
self.currentPLISTData["userReference"] = newUserReference
dispatch_async(GlobalMainQueue) {
var myAlert = UIAlertController(title: "Alert", message: "Registrierung erfolgreich", preferredStyle: UIAlertControllerStyle.Alert)
let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: { (action) in
self.dismissViewControllerAnimated(true, completion: nil)
})
myAlert.addAction(okAction)
self.presentViewController(myAlert, animated: true, completion: nil)
}
}
}
})我收到一条需要更改的错误消息:
let newUserReference = serverResponse["data"]["userReference"]至
let newUserReference = serverResponse["data"]!["userReference"]因此,展开["data"]组件。我搞不懂为什么会这样?
发布于 2016-03-29 14:48:54
快速字典 an 返回一个可选的.
这意味着要能够使用serverResponse["data"]订阅["userReference"],首先必须打开serverResponse["data"]。
它可以不安全地完成,比如在您的示例中,或者安全地使用类似于if let的东西。
if let data = serverResponse["data"] {
let newUserReference = data["userReference"]
}还请注意,编译器现在可能不是serverResponse["data"]的类型,因此您可能不得不降低它的类型,以便能够订阅它,例如:
if let data = serverResponse["data"] as? [String:AnyObject] {
let newUserReference = data["userReference"]
}发布于 2016-03-29 14:51:10
通过下标访问Dictionary<Key,Value>将返回一个Value?。这是因为您正在寻找的键值对可能不在字典中。因此,它返回一个可选选项,如果它找到键,则返回set;如果没有,则返回unset。
我会这样处理它,使用可选的链接:
if let serverResponse = response.value as? Dictionary<String,AnyObject>,
newUserReference = serverResponse["data"]?["userReference"] {
...
}通过将所有if..let语句组合成一个,可以减少“厄运金字塔”。
Eric D提出了一个很好的观点,您应该测试第一个下标的类型,我会这样做:
if let serverResponse = response.value as? Dictionary<String,AnyObject>,
data = serverResponse["data"] as? [String:AnyObject],
newUserReference = data["userReference"] {
...
}https://stackoverflow.com/questions/36287373
复制相似问题