如何将带竖线|的字符串转换为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
相关产品推荐
相关产品推荐

