Swift:可选下标的可选链接

2024-02-23

我有一个let map : [String: String] and a let key: String?.

最简洁的访问方式是什么map[key](并取回String?如果我有一个key and None如果我没有)?


let value = key.flatMap { map[$0] }

会用到这个技巧,使用

/// Returns `nil` if `self` is nil, `f(self!)` otherwise.
@warn_unused_result
public func flatMap<U>(@noescape f: (Wrapped) throws -> U?) rethrows -> U?

方法来自struct Optional.

或者,您可以将其包装到自定义下标方法中

extension Dictionary {
    subscript(optKey : Key?) -> Value? {
        return optKey.flatMap { self[$0] }
    }
}

和简单地写

let value = map[key]

为了避免与“正常”下标方法混淆,并使 代码的读者更清楚的意图,您可以定义 带有外部参数名称的下标方法:

extension Dictionary {
    subscript(optional optKey : Key?) -> Value? {
        return optKey.flatMap { self[$0] }
    }
}

let value = map[optional: key]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift:可选下标的可选链接 的相关文章

随机推荐

  • 如何在详细视图中跳转到下一行

    我有一个 TableView 它在 didSelectRow 中加载详细视图 我对数据没有任何问题 我正在使用 coreData 并使用 NSFetchedResultsController 来填充 TableView 现在 我想在详细视图
  • 将脚注添加到 gsummary 表中的单行标签

    我正在尝试向行标签添加脚注gtsummary https www danieldsjoberg com gtsummary 表 但我不知道如何引用我想要的确切单元格 预期输出 使用默认值trial数据集 我想在 药物 B 中添加一个脚注 内
  • Json 序列化将 k__BackingField 添加到我的属性中

    这种情况最近才开始发生在未更改的代码上 它是 nuget 包中的外部库 如果我这样做 var client HttpClient var response await client PostAsJsonAsync some url some
  • 启动进程并允许调用者结束而无需等待进程完成

    我需要从 C 控制台应用程序启动一个进程 然后允许控制台应用程序完成 结束 而无需等待进程 线程完成 我该怎么做呢 您需要避免使新进程成为当前进程的子进程 ProcessStartInfo sinfo new ProcessStartInf
  • 如果页面有 session_start(),则不会加载;在里面

    我最近从多年的 WAMP 切换到 XAMPP 因为我想要 PHP 7 但我注意到一些我以前从未经历过的事情 它不会加载具有以下内容的 php 文件 session start 在他们中 我只是在 Chrome IE FF 中收到 正在等待本
  • 来自 DataProvider 的 Yii 分页变量

    我的控制器操作中需要某些分页变量 such as 1 当前页码 2 当前页偏移量 3 显示总记录数 即显示 2005 年的 31 至 40 条记录 我尝试了以下方法 dataProvider NodesTerms getNodesDataF
  • Docker 按顺序下载各层

    有没有办法让 docker 按顺序而不是并行下载图像的各层 我之所以需要这个 是因为我们的存储库对网络问题非常严格 或狡猾 我收到很多 EOF 错误 例如 time 2016 06 14T13 15 52 936846635Z level
  • Web API 中的命名空间“System.Web”中不存在类型或命名空间“Http”

    我正在尝试按照此链接创建一个 Web API 我已经完全添加了它的显示方式this https www tutorialspoint com asp net mvc asp net mvc web api htm文章 但是添加控制器后 它给
  • 根据值向网格图添加边框

    我想知道你是否能帮我解决这个问题 我有一个由 0 和 1 组成的网格 如果它是 1 我想向绘图单元格区域添加边框颜色 我使用 imshow 生成根据值着色的网格 例如 a np random randint 2 size 10 10 im
  • Yarn 迷你集群容器日志目录不包含 syslog 文件

    我已经基于 CDH 5 1 0 的 hadoop 2 3 0 设置了带有 1 个节点管理器 4 个本地目录和 4 个日志目录等的 YARN MapReduce 迷你集群 它看起来或多或少起作用 我未能实现的是从容器进行系统日志记录 我看到容
  • 为什么 wget 输出到 stderr 而不是 stdout?

    经过 30 分钟徒劳尝试捕获输出后wget 我发现该程序写入stderr而不是stdout 在网络和堆栈溢出中搜索表明这是一个众所周知的事实 知道为什么会这样吗 这是众所周知的 因为它在manual http www gnu org sof
  • PHP 组合数组

    我如何组合这两个数组 如果数组有重复项 则只有一个使用 PHP 表示 Array 0 gt 18 1 gt 20 2 gt 28 3 gt 29 Array 0 gt 1 1 gt 8 2 gt 19 3 gt 22 4 gt 25 5 g
  • 如何对不描述函数的 N 个点进行插值

    Suppose i have n points also suppose that this points have an order and not necessary this points make a function I m wo
  • JavaFX ContextMenu 加速器从错误的选项卡触发

    我有一个TabPane有两个选项卡 每个选项卡都有一个TableView它有一个上下文菜单 这两个上下文菜单有重复的加速器 但我希望只有当前选定的选项卡才会响应 但发生的只是最后添加的Tab似乎得到了该事件 即使它没有被选择 下面是完整的示
  • 从子文件夹提供 React 应用程序时出错

    我正在尝试从子文件夹提供 React 应用程序 目前它是一个非常简单的 SPA 运行在根 URL 上 例如http 我的服务器 3000 http myserver 3000 并且我想从子文件夹中提供它 例如http myserver 30
  • 在仅包含值类型的自定义结构上使用 Marshal.SizeOf() 方法

    我创建了一个由两种值类型组成的简单结构 public struct Identifier public Guid ID get set public Byte RequestType get set 然后我打电话Marshal SizeOf
  • Django 中的 URL 正则表达式,具有有限的单词集

    给定以下 django URL conf 入口 url r P
  • 查找 2D 数组/矩阵中 k 个最高值的索引

    我有一个包含值的 2D 矩阵 我想找到前 5 个值的索引 例如对于 matrix 0 17542851 0 13199346 0 01579704 0 01429822 0 01302919 0 13279703 0 12444886 0
  • 自动完成jquery和SQL,ASP.NET

    我正在尝试使用 jquery 创建一个自动完成文本框 它将绑定到 SQL 数据库 我还想在页面上放置一个下拉列表 以便根据初始选择自动完成文本框将从不同的表中检索数据 这是一个 ASP NET 2 0 页面 背后的代码是 VB NET 我有
  • Swift:可选下标的可选链接

    我有一个let map String String and a let key String 最简洁的访问方式是什么map key 并取回String 如果我有一个key and None如果我没有 let value key flatMa