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点声望点。-最重要的是,它向观众表明,这个答案是解决这个问题的合适方法。