请给我一些有关此错误的解决方案线程1:致命错误:展开一个Optional值时意外发现nil

时间:2019-04-25 08:50:01

标签: swift nsuserdefaults

func doGetLocalDataUser() -> logInResponse {
     var localData : logInResponse? = nil
     if let userData = UserDefaults.standard
                                    .data(forKey: ConstantStrings.KEY_USER_LOGIN_DATA),let user = try? JSONDecoder()
                                    .decode(logInResponse.self ,from: userData){
                                            localData = user
                                    }
        return localData!
    }

2 个答案:

答案 0 :(得分:0)

localData为nil,所以您非法强行解开localData(作为logInResponse)。

如果您的可选链接在任何时候都找到nil(例如userDataUserDefaults中不存在/类型错误),它将不会执行。

>

您正在声明此doGetLocalDataUser()函数以返回非可选的logInResponse类型,并强制展开nil值以尝试检索一个值。最佳做法是避免强行解开“爆炸”运算符“ !”,因为这可能会导致致命错误。

简单的解决方案是将您的方法更改为返回可选的logInResponse?类型,并消除bang运算符:

func doGetLocalDataUser() -> logInResponse? {
    if let userData = UserDefaults.standard.data(forKey: ConstantStrings.KEY_USER_LOGIN_DATA), let user = try? JSONDecoder().decode(logInResponse.self ,from: userData){
        return user
    } else {
        return nil
    }
}

答案 1 :(得分:0)

我将方法更改为此:

$this->queryBuilder->getQueryPart('groupBy')

请记住,JSON解码可能会失败(可能格式错误),因此用户将为nil,并且此方法可以返回nil