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

Swift应用需求:点击按钮将随机单词存入对应编号数组并持久化

解决你的Swift单词存储与持久化问题

嘿,作为Swift新手能想到用类来管理数据真的很赞!我来一步步帮你实现需求——把随机单词按按钮编号存入对应数组,而且重启应用后还能查看这些单词。

第一步:创建数据管理类(核心)

我们需要一个专门的类来管理三个数组,同时处理数据的持久化(让数据重启后不丢失)。这里用UserDefaults做轻量持久化,很适合这种简单数据场景。另外把类做成单例,这样整个应用都能方便访问它。

首先让数据支持编码解码(因为UserDefaults只能存特定类型),我们让数据结构遵守Codable协议:

import Foundation

class WordDataManager {
    // 单例实例,全局唯一访问入口
    static let shared = WordDataManager()
    
    // 对应三个按钮的单词数组
    var oneWords: [String] = []
    var twoWords: [String] = []
    var threeWords: [String] = []
    
    // 初始化时自动加载已保存的数据
    private init() {
        loadSavedData()
    }
    
    // 保存数据到UserDefaults
    func saveData() {
        // 把三个数组打包成字典,方便统一存储
        let dataDict: [String: [String]] = [
            "one": oneWords,
            "two": twoWords,
            "three": threeWords
        ]
        // 编码成Data类型存入UserDefaults
        if let encodedData = try? JSONEncoder().encode(dataDict) {
            UserDefaults.standard.set(encodedData, forKey: "savedWordData")
        }
    }
    
    // 从UserDefaults加载历史数据
    private func loadSavedData() {
        guard let encodedData = UserDefaults.standard.data(forKey: "savedWordData") else {
            return // 没有保存的数据就直接返回
        }
        // 解码数据并赋值给数组
        if let decodedDict = try? JSONDecoder().decode([String: [String]].self, from: encodedData) {
            oneWords = decodedDict["one"] ?? []
            twoWords = decodedDict["two"] ?? []
            threeWords = decodedDict["three"] ?? []
        }
    }
    
    // 统一的添加单词方法,根据编号存入对应数组
    func addWord(_ word: String, toNumber number: String) {
        switch number {
        case "one":
            oneWords.append(word)
        case "two":
            twoWords.append(word)
        case "three":
            threeWords.append(word)
        default:
            print("无效的编号,请检查输入")
            return
        }
        // 添加完成后立刻保存,避免数据丢失
        saveData()
    }
}

第二步:完善按钮点击逻辑

修改你已有的按钮代码,点击时把生成的随机单词(假设你已经有randomWord变量存随机词)添加到对应数组:

// 替换成你生成随机单词的逻辑,比如这里先模拟一个示例值
var randomWord: String = "apple" 

@IBAction func chosenOne(_ sender: Any) {
    WordDataManager.shared.addWord(randomWord, toNumber: "one")
    // 可以加个用户提示,比如弹窗或打印
    print("单词已添加到编号1的列表")
}

@IBAction func chosenTwo(_ sender: Any) {
    WordDataManager.shared.addWord(randomWord, toNumber: "two")
    print("单词已添加到编号2的列表")
}

@IBAction func chosenThree(_ sender: Any) {
    WordDataManager.shared.addWord(randomWord, toNumber: "three")
    print("单词已添加到编号3的列表")
}

第三步:查看已保存的单词

如果要在界面展示这些单词,直接访问单例的数组即可,比如打印或者绑定到列表控件:

// 示例:打印所有已保存的单词
func showAllSavedWords() {
    print("编号1的单词:\(WordDataManager.shared.oneWords)")
    print("编号2的单词:\(WordDataManager.shared.twoWords)")
    print("编号3的单词:\(WordDataManager.shared.threeWords)")
}

你也可以把这些数组绑定到UITableView或UILabel上,让用户在界面直观查看。

小提示

  • 单例的好处是不用来回传递实例,在应用任何地方都能通过WordDataManager.shared访问数据。
  • UserDefaults适合轻量数据存储,如果以后单词量很大或需要更复杂的操作,可以考虑用Core Data,但当前需求用它完全足够。
  • 记得确保randomWord有值再调用添加方法,避免存入空字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:16:21