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

Swift中如何存储并使用默认对象列表

Swift中如何存储并使用默认对象列表

嘿,刚接触Swift的话别担心,我来一步步教你怎么处理这个默认对象列表的存储和使用~

1. 先定义对应的数据模型

首先得把JSON里的结构映射成Swift能识别的对象,用Codable协议最省心,不用自己写复杂的解析逻辑。咱们创建一个结构体:

struct ListItem: Codable {
    let name: String
    let icon: String
}

这个结构体的属性和你JSON里的name、icon完全对应,Codable会自动帮我们处理JSON和对象之间的转换。

2. 解析默认的JSON数据

接下来有两种常见的方式来处理你的默认JSON:

方式一:直接把JSON写在代码里(适合小列表)

把你的JSON转成字符串,然后直接在代码里解析:

// 先把JSON转成字符串(注意转义双引号)
let defaultItemsJSON = """
[
    {
        "name": "Apple",
        "icon": "applelogo"
    },
    {
        "name": "Banana",
        "icon": "leaf.fill"
    },
    {
        "name": "Car",
        "icon": "car.fill"
    }
]
"""

// 解析成ListItem数组
func getDefaultItems() -> [ListItem]? {
    guard let jsonData = defaultItemsJSON.data(using: .utf8) else {
        return nil
    }
    do {
        let items = try JSONDecoder().decode([ListItem].self, from: jsonData)
        return items
    } catch {
        print("解析失败:\(error.localizedDescription)")
        return nil
    }
}

调用这个方法就能拿到解析好的[ListItem]数组了,如果解析出错会打印错误信息,方便你排查问题。

方式二:把JSON存成文件(适合大列表或需要随时修改的情况)

如果你的默认列表以后可能要调整,把它做成.json文件更方便:

  1. 在Xcode里新建一个空文件,命名为DefaultItems.json,把你的JSON内容粘贴进去
  2. 然后用下面的代码读取文件并解析:
func getDefaultItemsFromFile() -> [ListItem]? {
    guard let fileURL = Bundle.main.url(forResource: "DefaultItems", withExtension: "json") else {
        print("找不到JSON文件")
        return nil
    }
    do {
        let jsonData = try Data(contentsOf: fileURL)
        let items = try JSONDecoder().decode([ListItem].self, from: jsonData)
        return items
    } catch {
        print("读取或解析失败:\(error.localizedDescription)")
        return nil
    }
}

3. 让默认列表全局复用(可选)

如果你的项目多个地方都要用到这个默认列表,不想每次都解析一遍,可以搞个简单的管理类,用单例或者静态属性来缓存解析后的结果:

class DefaultDataManager {
    static let shared = DefaultDataManager()
    var defaultItems: [ListItem]?
    
    private init() {
        // 初始化的时候就解析好,后面直接用
        defaultItems = getDefaultItems()
        // 如果用文件的话就换成getDefaultItemsFromFile()
    }
}

之后在项目任何地方想用,直接这样拿:

if let items = DefaultDataManager.shared.defaultItems {
    // 这里就可以用items数组了
    print(items.map { $0.name })
}

4. 在下拉菜单里使用(举个SwiftUI的例子)

如果是用SwiftUI做下拉选择器,直接把数组传给Picker就行:

struct ContentView: View {
    @State private var selectedItem: ListItem?
    let defaultItems = DefaultDataManager.shared.defaultItems ?? []
    
    var body: some View {
        Picker("选择一项", selection: $selectedItem) {
            ForEach(defaultItems, id: \.name) { item in
                HStack {
                    Image(systemName: item.icon)
                    Text(item.name)
                }
            }
        }
        .pickerStyle(.menu)
    }
}

如果是UIKit的UIPickerView,只需要把数组作为数据源,实现UIPickerViewDataSource和UIPickerViewDelegate的方法就行,逻辑差不多。

备注:内容来源于stack exchange,提问作者user16971617

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 17:04:27