Swift 4-如果值不在Plist中,则捕获错误
我有这个密码Swift 4-如果值不在Plist中,则捕获错误,swift,macos,Swift,Macos,我有这个密码 let path = self.userDesktopDirectory + "/Library/Preferences/.GlobalPreferences.plist" let dictRoot = NSDictionary(contentsOfFile: path) if let dict = dictRoot{ try print(dict["AppleLocale"] as! String)
let path = self.userDesktopDirectory + "/Library/Preferences/.GlobalPreferences.plist"
let dictRoot = NSDictionary(contentsOfFile: path)
if let dict = dictRoot{
try print(dict["AppleLocale"] as! String)
}
如果值“AppleLocale”不存在,脚本将崩溃。我必须添加什么来“捕获”错误并避免崩溃
如果值“AppleLocale”不存在,脚本将崩溃。我
必须添加以“捕获”错误并避免崩溃
取决于造成车祸的原因。提到“如果值AppleScale
不存在”意味着碰撞的原因可能是强制铸造:
dict["AppleLocale"] as! String
很可能,它与try
无关,它将是:
在展开可选值时意外发现nil
这意味着在某一点上,dict[“AppleLocale”]可能是nil
,或者即使它包含的值不是字符串,它也会崩溃()。您必须确保dict[“AppleLocale”]
是有效的(而不是nil
)字符串,执行此操作的方法不止一种,例如,您可以执行可选绑定,如下所示:
let path = self.userDesktopDirectory + "/Library/Preferences/.GlobalPreferences.plist"
let dictRoot = NSDictionary(contentsOfFile: path)
if let dict = dictRoot{
if let appleLocale = dict["AppleLocale"] as? String {
print(appleLocale)
} else {
// `dict["AppleLocale"]` is nil OR contains not string value
}
}
实际上,我假设您不必为这种情况处理
try
。您只需要删除强制展开,即print(dict[“AppleLocale”]as?String??“AppleLocale不存在”)
即可。谢谢你。谢谢你,这对我帮助很大@Sascha7777很乐意帮忙。如果这个答案解决了您的问题,请不要忘记接受它(绿色勾选):)仅供参考,接受答案将导致:-给回答者+15声誉点。-给你(询问者)+2点声望点。-最重要的是,它向观众表明,这个答案是解决这个问题的合适方法。