删除强制解包

时间:2018-01-17 11:08:48

标签: swift optional

移除力展开

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]
    }() 

删除强制解包后应该是什么?

5 个答案:

答案 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"
}

最终结果非常相似,但你摆脱了'()'表示法: - )