删除强制解包

问题描述 投票:1回答:5

移除力展开

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

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

swift optional
5个回答
3
投票

你可以

return Locale.current.languageCode 

没有强行打开,如果你反正只返回零。


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功能。


1
投票

你的代码看起来很好。您也可以考虑使用guard语句。

private func getLanguageCode() -> String? {
    guard let language = Locale.current.languageCode else { return nil }
    return language
}

1
投票

如果要返回非可选String,可以执行以下操作:

private func getLanguageCode() -> String {
    return Locale.current.languageCode ?? ""
}

如果您更喜欢返回String ?,那么:

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
}

0
投票

如果您不想处理解包,您可以轻松地执行此操作:

private func getLanguageCode() -> String {
    return Locale.current.languageCode ?? "en"
}

这将返回可选的值(如果可用),否则将返回指定的值。

您还可以使用属性来获取预期值:

private var getLanguageCode: String {
    return Locale.current.languageCode ?? "en"
}

最后的结果是相同的,但你摆脱'()'表示法:-)

© www.soinside.com 2019 - 2024. All rights reserved.