作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我收到来自服务器的 JSON 响应。
do {
let response = try NSJSONSerialization.JSONObjectWithData(data!,options:NSJSONReadinOptions.AllowFragments)
let cityDetails = reponse["cityDetails"]
if cityDetails!.isKindOfClass(NSArray) {
}
}catch {
println("Error \(error)")
}
我收到以下消息
Value of optional Type "AnyObject?" not unwrapped did you mean to use ! or ??
我后来添加的更正是使用 double !!。如果 cityDetails!!.isKindOfClass(NSArray)
下面列出了两个理解这个问题的问题?
1) 为什么要再次解包对象,即使它已经解包一次。
2) 下面的代码做同样的事情,但只需要解包一次。此外,它崩溃是因为 result 恰好是 nil。在 Objectice C 中,nil 已经是 handle 并且在这种情况下会返回 false,而不是使应用程序崩溃。在那个声明中。
let testDictionary:[String:AnyObject] = ["a",NSMutableArray()]
let result = testDictionary["C"]
if result.isKindOfClass(NSArray) {
}
输入后的答案2) 为了解决第二个问题,我使用以下代码。
方法一
if let _ = result {
if result.isKindOfClass(NSArray) {
}
}
方法二
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
let testDictionary:[String:AnyObject] = ["a":NSMutableArray()]
let result = testDictionary["C"]
print("Before details Check")
guard let details = result where details.isKindOfClass(NSArray) else {
return false
}
print("Returned Result \(details)")
print("After Details Check")
return true
}
最佳答案
通过if let 或guard let 语句解包值:
guard let cityDetails = response["cityDetails"] as? NSArray else {
// Something went wrong trying to turn response["cityDetails"] into an unwrapped NSArray
return
}
// From this point cityDetails will be an unwrapped NSArray
强制展开变量是您应该尽可能避免的事情。
另一个片段:
guard let result = result // Unwrap result
where result.isKindOfClass(NSArray) else { // Ask the unwrapped value if it's an NSArray
return // If one of above is not the case we shouldn't continue
}
关于ios - 可选类型 "AnyObject?"的值未解包,您是否打算使用!或者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33323871/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!