我正在尝试加载.plist文件时收到此警报。任何建议。 `
filePath = Bundle.main.path(forResource: Constants.kCPECardHeaderAttribute, ofType: "plist")
使用NSDictionary加载文件内容,如下所示:
guard let fileContentArray:NSDictionary = NSDictionary(contentsOfFile: filePath!)! else{
return
}
答案 0 :(得分:6)
在!
NSDictionary(contentsOfFile:)
guard let fileContentArray = NSDictionary(contentsOfFile: filePath!) else {
return
}
guard-let-else
和!
都删除了选项。没有必要将它们用于相同的选项。
您实际上可以对两个选项使用相同的模式:
guard
let filePath = filePath,
let fileContentArray = NSDictionary(contentsOfFile: filePath)
else {
return
}
作为旁注,将词典类型的变量命名为 arrays 并不常见。
答案 1 :(得分:1)
首先:变量名 fileContent 数组 ,预期类型 ...词典 令人困惑和矛盾。
你必须传递一个可选项才能使用可选绑定,感叹号会打开可选项,这会使检查变得毫无意义。删除第二个!
。
然而,强烈建议使用与URL相关的API和PropertyListSerialiation
来获取本机Swift集合类型:
if let url = Bundle.main.url(forResource:Constants.kCPECardHeaderAttribute, withExtension: "plist") {
do {
let data = try Data(contentsOf: url)
let fileContentDictionary = try PropertyListSerialization.propertyList(from: data, format: nil) as! [String:Any]
print(fileContentDictionary)
} catch {
fatalError("Bad Design! This should never happen").
}
}
答案 2 :(得分:-1)
这是因为你正在使用'!',如果你想检查它是否是可选的,你应该使用?相反,给它一个你想要的类型。
例如
guard let fileContentArray:NSDictionary = NSDictionary(contentsOfFile: filePath) ? String else{
return
}