移除力展开
private func getLanguageCode() -> String {
return Locale.current.languageCode!
}
取消力展开后
private func getLanguageCode() -> String? {
if let language = Locale.current.languageCode {
return language
}
return nil
}
正确?
这个
lazy var commonErrorList : Dictionary<String, AnyObject>? = {
let path = Bundle.main.path(forResource: "CommonErrorCodes", ofType: "plist")
return NSDictionary(contentsOfFile: path!) as? [String : AnyObject]
}()
删除强制解包后应该是什么?
答案 0 :(得分:3)
你可以
return Locale.current.languageCode
没有强制打开,如果你反正只返回nil。
答案 1 :(得分:2)
您可以尝试防范将来阻止嵌套if语句。在警卫声明中,它将是这样的:
private func getLanguageCode() throws -> String {
guard let language = Locale.current.languageCode else {
throw LanguageError.CanNotGetCode
}
return language
}
或没有投掷
private func getLanguageCode()-> String? {
guard let language = Locale.current.languageCode else {
return nil
}
return language
}
如果将来要处理功能错误,可以使用throw功能。
答案 2 :(得分:1)
您的代码对我来说很好。您也可以考虑使用guard
语句。
private func getLanguageCode() -> String? {
guard let language = Locale.current.languageCode else { return nil }
return language
}
答案 3 :(得分:1)
如果您想要返回非可选字符串,您可以这样做:
private func getLanguageCode() -> String {
return Locale.current.languageCode ?? ""
}
如果您希望返回字符串?,则:
private func getLanguageCode() -> String? {
return Locale.current.languageCode
}
如果你仍然想要出于某种原因检测函数内的nil条件:
private func getLanguageCode() -> String? {
guard let language = Locale.current.languageCode else {
// Do something here...
return nil
}
return language
}
答案 4 :(得分:0)
如果您不想处理解包,可以轻松地执行此操作:
private func getLanguageCode() -> String {
return Locale.current.languageCode ?? "en"
}
这将返回可选的值(如果可用),否则它将返回指定的值。
您还可以使用属性来获取预期值:
private var getLanguageCode: String {
return Locale.current.languageCode ?? "en"
}
最终结果非常相似,但你摆脱了'()'表示法: - )