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

如何将带竖线|的字符串转换为Swift的[String:Any]字典?

Swift 竖线分隔字符串转 [String: Any] 字典的简洁实现

要把竖线分隔的键值对字符串转换成[String: Any]字典,你可以用components(separatedBy:)结合reduce(into:)的链式写法,同时处理值的类型解析,比单独循环更简洁:

基础实现(匹配你的示例需求)

let input = "boolFirst=false|onProject=Active|passed=false"

let output = input.components(separatedBy: "|")
    .reduce(into: [String: Any]()) { dict, pair in
        let parts = pair.components(separatedBy: "=")
        // 过滤格式错误的键值对(比如缺少=、键为空)
        guard parts.count == 2, let key = parts.first, !key.isEmpty else { return }
        let valueStr = parts[1]
        // 优先解析Bool类型,否则保留字符串
        if let boolValue = Bool(valueStr) {
            dict[key] = boolValue
        } else {
            dict[key] = valueStr
        }
    }

print(output)
// 输出:["boolFirst": false, "onProject": "Active", "passed": false]

扩展支持更多类型

如果需要解析Int、Double等其他类型,可以扩展判断逻辑:

let output = input.components(separatedBy: "|")
    .reduce(into: [String: Any]()) { dict, pair in
        let parts = pair.components(separatedBy: "=")
        guard parts.count == 2, let key = parts.first, !key.isEmpty else { return }
        let valueStr = parts[1]
        
        if let boolValue = Bool(valueStr) {
            dict[key] = boolValue
        } else if let intValue = Int(valueStr) {
            dict[key] = intValue
        } else if let doubleValue = Double(valueStr) {
            dict[key] = doubleValue
        } else {
            dict[key] = valueStr
        }
    }

为什么这更简洁?

  • 链式调用把字符串分割、字典构建、类型解析整合在一起,避免额外的临时变量和循环代码。
  • 内置的安全判断可以避免格式错误的字符串导致程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:57:11