You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问UserDefaults中存储对象的属性?需获取user字典内的fullname字段

解决UserDefaults数据访问问题

嘿,我来帮你搞定这个UserDefaults的访问问题!针对你提到的两种场景,我分别给你梳理清楚步骤:

一、访问现有嵌套字典中的fullname字段

你现在存在UserDefaults里的是一个可选的嵌套字典结构,要安全访问user里的fullname,可以通过可选链+类型转换来实现,避免强制解包导致崩溃。

具体代码示例:

首先从UserDefaults取出数据(记得替换成你实际存储时用的key):

let defaults = UserDefaults.standard
// 取出顶层字典,类型是 [String: Any]?
let responseDict = defaults.dictionary(forKey: "你的存储键名")

然后有两种方式访问fullname:

  1. 分步解包(更清晰,适合复杂结构):
if let userDict = responseDict?["user"] as? [String: Any], 
   let fullname = userDict["fullname"] as? String {
    // 这里安全拿到了fullname的值,比如"xyz"
    print("用户名:\(fullname)")
    // 在这里执行你的逻辑
}
  1. 链式访问(更简洁):
if let fullname = responseDict?["user"]?["fullname"] as? String {
    // do something
}

二、访问UserDefaults中存储的自定义对象属性

如果你存储的是自定义对象(而不是字典),UserDefaults本身不直接支持存储对象,需要先把对象转成Data(推荐用Codable协议实现序列化),取出时再解码回对象,之后就能直接访问对象的属性了。

具体步骤:

  1. 先定义符合Codable的模型:
// 定义用户模型
struct User: Codable {
    let fullname: String
    let id: Int
}

// 定义顶层响应模型
struct ApiResponse: Codable {
    let message: String
    let success: Bool
    let user: User
}
  1. 存储对象到UserDefaults:
// 创建示例对象
let user = User(fullname: "xyz", id: 0)
let response = ApiResponse(message: "Hello", success: true, user: user)

// 编码成Data并存入UserDefaults
do {
    let responseData = try JSONEncoder().encode(response)
    UserDefaults.standard.set(responseData, forKey: "apiResponse")
} catch {
    print("编码失败:\(error.localizedDescription)")
}
  1. 取出对象并访问属性:
if let responseData = UserDefaults.standard.data(forKey: "apiResponse") {
    do {
        let response = try JSONDecoder().decode(ApiResponse.self, from: responseData)
        // 直接访问对象属性
        print(response.user.fullname) // 输出 "xyz"
        print(response.success) // 输出 true
    } catch {
        print("解码失败:\(error.localizedDescription)")
    }
}

这样处理不仅类型安全,代码也更易读,后续维护起来也方便~

内容的提问来源于stack exchange,提问作者MAZIN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:05:47