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

如何在Alamofire中跨类/视图控制器复用UserDefaults存储的默认值?

如何在其他类/视图控制器中复用UserDefaults存储的值?

我先声明存储对象:let PointHistory = UserDefaults.standard,随后在按钮点击事件中使用Alamofire发起请求:

@IBAction func buttonPointHistory(_ sender: UIButton) { 
    let parameters: Parameters=[ "Card_No":labelCardNo.text! ] 
    Alamofire.request(URL, method: .post, parameters: parameters).responseJSON { response in 
        print(response) 
        self.PointHistory.set(PointHistoryURL, forKey: "Points") 
    } 
} 

现在我的问题是,如何在其他类或视图控制器中返回或复用该存储的值?


其实复用UserDefaults里存储的值非常简单,因为UserDefaults.standard是全局单例对象,你可以在任何类中直接访问它。我给你拆解几个关键步骤:

1. 在目标类/视图控制器中读取值

不管是在新的视图控制器还是工具类里,直接通过UserDefaults.standard读取对应键的值就行。举个例子:

// 在任意需要复用值的类中
if let savedPointURL = UserDefaults.standard.string(forKey: "Points") {
    // 成功拿到存储的PointHistoryURL,直接用就行
    print("已读取存储的Points值:\(savedPointURL)")
    // 比如用来发起新请求、展示在UI上都可以
} else {
    // 如果没找到对应值,可以做默认处理(比如提示用户无数据)
    print("未找到存储的Points相关数据")
}

2. 优化你的存储逻辑(可选但推荐)

我注意到你用了PointHistory作为UserDefaults.standard的别名,其实可以进一步优化:把存储的键名定义成全局常量,避免拼写错误,后期维护也更方便。比如:

// 定义全局常量,统一键名
let kPointsStorageKey = "Points"

// 存储的时候用这个常量
UserDefaults.standard.set(PointHistoryURL, forKey: kPointsStorageKey)

// 读取的时候也用同一个常量
if let savedPointURL = UserDefaults.standard.string(forKey: kPointsStorageKey) {
    // 使用值
}

这样以后要改键名的话,只需要改一处就搞定,不用在代码里到处找字符串。

3. 注意数据类型匹配

一定要保证存储和读取的类型一致!比如如果PointHistoryURL是URL类型,那读取时要用url(forKey:)而不是string(forKey:):

// 存储URL对象
UserDefaults.standard.set(PointHistoryURL, forKey: kPointsStorageKey)

// 读取URL对象
if let savedPointURL = UserDefaults.standard.url(forKey: kPointsStorageKey) {
    // 使用这个URL
}

类型不匹配的话会直接返回nil,这点一定要注意。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:15:17