我正在尝试PropertyListSerialization
而不是仅使用NSDictionary(contentsOfFile:)
,因此我更改了代码。现在使用guard
,我必须提供else
。我提供else
。我在这行代码中犯了什么错误?
它说:
预期'否则'在'后卫'条件。
使用NSDictionary(contentsOfFile:)
时这行代码运行正常。但是对PropertyListSerialization
的这种改变对我不起作用。
guard
let filePathValue = filePath,
// let fileContentDictionary:NSDictionary = NSDictionary(contentsOfFile: filePathValue)
let data = try? Data(contentsOf: filePathValue as URL),
let result = try? PropertyListSerialization.propertyList(from: data, options: [], format: nil) as? [[String:Any]]
print(result!)
else{
return
}
答案 0 :(得分:1)
您的print(result!)
是个问题。
删除它。
<强>更新强>
guard let filePathValue = filePath,
//let fileContentDictionary: NSDictionary = NSDictionary(contentsOfFile: filePathValue)
let data = try? Data(contentsOf: filePathValue as URL),
let result = try? PropertyListSerialization.propertyList(from: data, options: [], format: nil) as? [[String:Any]]
else {
return
}
print(result!)
答案 1 :(得分:1)
如果您的回复是result
,那么您也可以在else
阻止之后访问dictionary
,然后您需要将propertyList(from:options:format:)
的结果转换为[String:Any]
[[String:Any]]
,因为它是字典。
guard let filePathValue = filePath,
//let fileContentDictionary: NSDictionary = NSDictionary(contentsOfFile: filePathValue)
let data = try? Data(contentsOf: filePathValue as URL),
let result = try? PropertyListSerialization.propertyList(from: data, options: [], format: nil) as? [String:Any] //not [[String:Any]]
else {
return
}
//Result is still optional
print(result!)
现在,您使用try?
后,您的结果仍然是可选的,因此如果您希望结果为非可选结果,请将()
与try?
一起使用。
guard let filePathValue = filePath,
//let fileContentDictionary: NSDictionary = NSDictionary(contentsOfFile: filePathValue)
let data = try? Data(contentsOf: filePathValue as URL),
let result = (try? PropertyListSerialization.propertyList(from: data, options: [], format: nil)) as? [String:Any] //not [[String:Any]]
else {
return
}
//Now result is non-optional
print(result)
答案 2 :(得分:1)
基本的guard-else
块看起来像这样:
guard `condition` else {
`statements`
}
示例:
guard let name = optionalName else {
// Value requirements not met, do something.
// name isn't available here
return
}
// Value requirements met, do something with name
// name is available here
// Rest of the code goes here
您必须将guard-else
视为单个程序控制语句。他们之间没有任何陈述。仅检查条件。您可以使用逗号(,)分隔多个条件。
来自documentation它说:
任何常量或变量都从可选绑定中赋值 保护声明条件中的声明可用于其余部分 守卫声明的封闭范围。