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

如何将用户输入值设为后续使用的默认值?(项目完工日期计算APP)

如何将用户输入设为后续使用的默认值(MacOS Swift项目)

嘿,我看你正在开发一个计算项目完工日期的Mac App,想要把用户输入的分钟数(还有可能的日期)设为后续打开APP时的默认值对吧?这事儿用UserDefaults就能轻松搞定——它就是Apple提供的专门用来存储这类轻量、持久化配置的工具,完全不用复杂的数据库操作。

下面结合你的现有代码,给你分步说明实现方式:

1. 保存用户输入到UserDefaults

在你的BDSave方法里,完成日期计算逻辑后,把用户输入的值存到UserDefaults里就行。这里还加了安全转换的处理,避免用户输入非数字导致崩溃:

@IBAction func BDSave(_ sender: Any) {
    let currentDate = Date()
    // 安全转换用户输入的分钟数,避免非数字输入崩溃
    guard let completedMinutes = Int(BDTime.stringValue) else {
        // 这里可以加个提示,比如弹出alert告诉用户输入无效
        print("请输入有效的数字")
        return
    }
    let daysToAdd = 10 - completedMinutes
    var dateComponent = DateComponents()
    dateComponent.day = daysToAdd
    // ... 这里继续你的日期计算和后续逻辑(比如更新BDDate的显示)
    
    // 保存输入的分钟数为默认值
    UserDefaults.standard.set(completedMinutes, forKey: "DefaultCompletedMinutes")
    // 如果需要保存用户选择的日期,也可以一起存
    if let selectedDate = BDDate.dateValue {
        UserDefaults.standard.set(selectedDate, forKey: "DefaultSelectedDate")
    }
}

2. 启动时加载默认值到控件

在viewDidLoad方法里,从UserDefaults取出之前保存的值,自动填充到对应的输入控件中,这样用户下次打开APP就能看到上次的输入:

override func viewDidLoad() {
    super.viewDidLoad()
    
    // 加载保存的默认分钟数
    let defaultMinutes = UserDefaults.standard.integer(forKey: "DefaultCompletedMinutes")
    if defaultMinutes > 0 { // 避免默认的0(未保存过的情况)填充到输入框
        BDTime.stringValue = "\(defaultMinutes)"
    }
    
    // 加载保存的默认日期
    if let savedDate = UserDefaults.standard.object(forKey: "DefaultSelectedDate") as? Date {
        BDDate.dateValue = savedDate
    }
}

额外小贴士

  • UserDefaults里的数据是持久化的,除非用户卸载APP或者手动清除应用数据,否则会一直保留
  • 如果需要清空默认值,可以调用UserDefaults.standard.removeObject(forKey: "DefaultCompletedMinutes")
  • 记得处理用户输入异常的情况(比如非数字),不然APP容易崩溃哦

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:23:56