无法将“__NSCFData”类型的值 (0x39490110) 转换为 'NSString' (0x394990ac)

Could not cast value of type '__NSCFData' (0x39490110) to 'NSString' (0x394990ac)

在代码的以下部分使用 objectMapper 框架将 jsonstring 转换为 object 时发生崩溃,但我猜我实现的方式是正确的。

Could not cast value of type '__NSCFData' (0x39490110) to 'NSString' (0x394990ac)

代码如下:

static func saveUserRefererInfo(userRefInfo : UserRefererInfo?)
{
    if userRefInfo != nil {
        let jsonText = Mapper().toJSONString(userRefInfo!, prettyPrint: true)!
        userDefaults.set(jsonText, forKey: SharedPreferenceHelper.USER_REFERER_INFO)
    } else {
        userDefaults.set(nil, forKey: SharedPreferenceHelper.USER_REFERER_INFO)
    }
}

static func getUserRefererInfo() -> UserRefererInfo?
{
    let userRefInfo = userDefaults.value(forKey: SharedPreferenceHelper.USER_REFERER_INFO)
    if userRefInfo != nil {
        return Mapper<UserRefererInfo>().map(JSONString: userRefInfo! as! String)
    }
    return nil
} 

崩溃发生在这行代码中:

return Mapper<UserRefererInfo>().map(JSONString: userRefInfo! as! String)

错误很明显:userRefInfo 的类型是 (NS)Data

我不知道 userRefInfo 是如何进一步处理的,但这是从 UserDefaults.

获取 Data 的常用方法
if let userRefInfo = userDefaults.data(forKey: SharedPreferenceHelper.USER_REFERER_INFO)
    return Mapper<UserRefererInfo>().map(JSONString: userRefInfo)
}

从不 value(forKey:从不 if foo != nil { ... foo! }

考虑到 ObjectMapper 在 Swift 4+

中取而代之的是 Codable