gpt4 book ai didi

ios - 可选类型 "AnyObject?"的值未解包,您是否打算使用!或者?

转载 作者:行者123 更新时间:2023-11-28 08:54:51 25 4
gpt4 key购买 nike

我收到来自服务器的 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 letguard 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com