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

Swift中如何将RawJSON数组解码还原为原生字符串数组

报错原因
  • 类型不匹配:遍历得到的item是RawJSON枚举类型,目标数组是[String]原生字符串数组,两种类型不能直接赋值、追加。
  • 语法错误:原代码用let声明arrayString,定义的是不可变数组,本身就不支持调用append方法修改。
正确转换方法

安全转换(推荐)

使用compactMap配合模式匹配提取.string分支的关联值,即使数组中混入数字、布尔值等其他类型的RawJSON元素也不会崩溃:

let rawJSONArray = [RawJSON.string("A"), RawJSON.string("B"), RawJSON.string("C")]
let stringArray = rawJSONArray.compactMap { item -> String? in
    guard case let .string(value) = item else { return nil }
    return value
}
// 最终得到原生字符串数组["A", "B", "C"]

循环写法修正版

如果习惯用遍历逻辑,注意把数组声明为可变的var,追加前提取枚举中包裹的原生字符串值:

let rawJSONArray = [RawJSON.string("A"), RawJSON.string("B"), RawJSON.string("C")]
var arrayString: [String] = []
for item in rawJSONArray {
    if case let .string(value) = item {
        arrayString.append(value)
    }
}

简化调用扩展

如果项目中频繁需要从RawJSON取原生值,可以加扩展简化代码:

extension RawJSON {
    var stringValue: String? {
        guard case let .string(value) = self else { return nil }
        return value
    }
    // 可按需扩展numberValue、boolValue、arrayValue等其他类型快速取值属性
}

加完扩展后转换代码可以简化为一行:

let stringArray = rawJSONArray.compactMap(\.stringValue)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:39:41