Swift 4-如果值不在Plist中,则捕获错误

时间:2018-06-24 11:40:42

标签: 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)
        }

如果值“ AppleLocale”不存在,脚本将崩溃。我必须添加些什么来“捕获”错误并避免崩溃?

1 个答案:

答案 0 :(得分:0)

  

如果值“ AppleLocale”不存在,脚本将崩溃。我什么   必须添加“捕获”错误并避免崩溃?

取决于导致崩溃的原因。提及“如果值AppleLocale不存在”,则表示崩溃的原因是强制转换:

dict["AppleLocale"] as! String

可能与try无关,而是:

  

在展开可选值时意外发现nil

表示在某个时刻dict["AppleLocale"]可能是nil,或者即使它包含的值不是字符串,也会崩溃( optional )。您必须确保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