gpt4 book ai didi

json - 在 Swift 中检查 Optionals 是否为 nil

转载 作者:搜寻专家 更新时间:2023-10-31 22:03:58 24 4
gpt4 key购买 nike

如何在 Swift 中检查 Optionals 的 nil 值?

我正在尝试评估解析 JSON 是否成功。当传递无效的 json 时,这应该打印一条错误消息,但失败并返回 EXC_BAD_INSTRUCTION。

func parseJson(data: NSData) {
var error: NSError?
var json: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
if let err = error {
println("error parsing json")
return
}
println("json parsed successfully")
}

尝试使用有效的 json 运行(工作正常):

parseJson(NSData(data: "{}".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)))

尝试使用无效的 json:

parseJson(NSData(data: "123".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true)))

我是否错过了使用 Optionals 的要点?

最佳答案

发生崩溃是因为 JSONObjectWithData 在出现错误时返回 nil。然后你尝试将 nil 转换为 NSDictionary。这有效:

func parseJson(data: NSData) {
var error: NSError?
var json : AnyObject! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error)
if let err = error {
println("error parsing json")
return
}
println("json parsed successfully")
var jsonDict = json as NSDictionary
}

如果你愿意,你可以将 var json 的类型切换为 NSDictionary?所以直接处理nil。为此,您只需添加一个“?”像这样添加到“as”关键字:

func parseJson(data: NSData) {
var error: NSError?
var json: NSDictionary? = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as? NSDictionary
if let err = error {
println("error parsing json")
return
}
// unwrap the optional value
if let jsonDictionary = json {
println("json parsed successfully")
// use the dictionary
}
}

关于json - 在 Swift 中检查 Optionals 是否为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24101468/

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