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

如何从[String: Any?]字典中优雅提取String类型值?

解决[String: Any?]字典中提取String?类型值的最优方案

你需要的效果可以通过一行简洁代码实现,完全满足键不存在、值为nil或值非String时返回nil的要求:

let found: String? = annoying["height"] as? String

原理说明

  • annoying["height"]的返回类型是Any??(双层可选):
    • 键"height"不存在时,返回外层nil;
    • 键存在但对应值是nil时,返回.some(nil)(内层nil);
    • 键存在且值为非String类型时,返回.some(非String值)。
  • as? String会自动处理所有情况:无论外层/内层是nil,或者值无法转为String,最终都会返回String?类型的nil;只有当值是有效String时,才会返回对应的可选字符串。

复用优化(可选)

如果需要多次从这类字典中提取字符串,可以给字典写个扩展方法,让代码更易读:

extension Dictionary where Key == String, Value == Any? {
    func string(forKey key: Key) -> String? {
        return self[key] as? String
    }
}

// 调用方式
let height = annoying.string(forKey: "height")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:07:06