gpt4 book ai didi

ios - fatal error :使用JSON文件和SwiftyJSON解开可选值时意外发现nil

转载 作者:行者123 更新时间:2023-12-01 18:46:04 25 4
gpt4 key购买 nike

我在parseJSON()函数中迅速找到了此代码,它将检索json文件中的Makes,但是我收到一条错误消息,说fatal error: unexpectedly found nil while unwrapping an Optional value
注意:我正在使用SwiftyJSON,错误指向if condition

func parseJSON() {

let path: String = NSBundle.mainBundle().pathForResource("vehicles", ofType: "json") as String!
let jsonData = NSData(contentsOfFile: path) as NSData!
let readableJSON = JSON(data: jsonData, options: NSJSONReadingOptions.MutableContainers, error: nil)
numberOfRows = readableJSON.count
for element in 1...numberOfRows {
var Makes = readableJSON[element]["Make"]

if !makeArray.contains(Makes.string! && ){ // error is pointing here!
let Make = readableJSON[element]["Make"].string as String!
makeArray.append(Make)
}
}

}

最佳答案

SwiftyJSON对象的.string属性是可选的getter。

它的值可以存在或为零。

因此,在使用前必须安全地将其拆开。

最简单的例子:

if let makeString = Makes.string {
if !makeArray.contains(makeString) {
let Make = readableJSON[element]["Make"].stringValue
makeArray.append(Make)
}
}

您可以注意到,使用SwiftyJSON,可选的 .string getter的反面是非可选的 .stringValue getter。

但是要当心!如果此属性为nil,则应用程序将崩溃。
.stringValue.string!相同

因此,您也可以在此处使用可选的getter和“if let”:
if let makeString = Makes.string {
if !makeArray.contains(makeString) {
if let Make = readableJSON[element]["Make"].string {
makeArray.append(Make)
} else {
// readableJSON[element]["Make"].string is nil, handle the error
}
}
} else {
// Makes.string is nil, handle the error
}

等,你明白了。

也可以使用 where这样简化:
if let makeString = Makes.string where !makeArray.contains(makeString) {
if let Make = readableJSON[element]["Make"].string {
makeArray.append(Make)
} else {
// readableJSON[element]["Make"].string is nil, handle the error
}
} else {
// Either Makes.string is nil or makeArray does contain it, handle the rror
}

关于ios - fatal error :使用JSON文件和SwiftyJSON解开可选值时意外发现nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35701856/

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