You need to enable JavaScript to run this app. 什么是Swift中的UnkeyedContainer?
优惠活动
大模型
产品
解决方案
定价
更多

什么是Swift中的UnkeyedContainer?

Swift UnkeyedContainer 详解

基本定义

UnkeyedContainer是Swift Codable编解码体系中的核心容器类型之一,是UnkeyedEncodingContainer(编码用)和UnkeyedDecodingContainer(解码用)的统称,专门用于处理按顺序存储、无自定义键的序列型数据,最典型的应用场景就是处理JSON数组。

核心特点

  • 内部元素严格按存储顺序排列,读写操作都需要遵循顺序执行
  • 没有自定义的CodingKey关联,仅能通过索引定位或者追加的方式操作元素
  • 天然支持长度不确定的列表类数据,不需要提前声明元素数量

典型使用场景

大部分时候系统会自动隐式调用UnkeyedContainer处理数组类型的编解码,不需要开发者手动操作,只有需要自定义编解码逻辑时才需要手动调用,常见场景包括:

  • 数组内元素类型不统一,需要逐个判断类型后解码
  • 需要对序列内的元素做批量预处理,比如过滤非法值、类型转换
  • 处理嵌套的无键序列结构

代码示例

比如我们需要手动解码一个纯字符串组成的JSON数组:
待解码的JSON数据:

["北京", "上海", "广州", "深圳"]

对应的解码实现:

struct CityList: Decodable {
    let cities: [String]
    
    init(from decoder: Decoder) throws {
        // 从解码器中获取无键容器
        var container = try decoder.unkeyedContainer()
        var tempCities: [String] = []
        // 遍历容器直到所有元素读取完成
        while !container.isAtEnd {
            let city = try container.decode(String.self)
            tempCities.append(city)
        }
        cities = tempCities
    }
}

如果是编码的场景,也可以通过encoder.unkeyedContainer()获取编码容器,调用encode(_:)方法按顺序追加元素即可。


内容的提问来源于stack exchange,提问作者Mihai Șerban

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 01:54:01