Swift:无法在某些闭包中分解元组(例如,通过枚举减少)?

2023-12-10

当使用map()和enumerate()时,Swift将分解枚举元组:

map(enumerate([1,2,3])) { (index, element) in
    index + element
}

然而,这似乎不能与额外的闭包参数一起使用(例如,使用reduce()):

reduce(enumerate([1,2,3]), 0) { (accum, (index, element)) in
    accum + index + element
}

这失败了error: use of undeclared type 'index'.

我是否遗漏了一些简单的东西,或者 Swift 根本不允许分解元组和附加参数?我在1.1和1.2中都尝试过这个。 (目前,我使用简写参数名称。)


答案是“Swift 根本不允许”。你无法分解nested像这样的元组。

例如,这段代码可以编译,但我们无法访问j or k:

func foo(i: Int, (j: Int, k: Int) ) {
    // println(j)
    //         ^ error: use of unresolved identifier 'j'
}
foo(1, (2, 3))

因为,在这段代码中,(j: Int, k: Int)只是一个类型,接收到的元组本身没有名称。你必须这样写:

func foo(i: Int, x: (j: Int, k: Int) ) {
    println(x.j)
}
foo(1, (1, 2))

同样的,这个可以编译,但是没有用。

reduce(enumerate([12,42,84]), 0) { (accum, (index:Int, element:Int)) in

相反,您必须接收元组本身,然后根据需要分解它:

reduce(enumerate([12,42,84]), 0) { (accum, enumerated)  in
    println(enumerated.element)

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

Swift:无法在某些闭包中分解元组(例如,通过枚举减少)? 的相关文章

随机推荐

  • 没有 jQuery 的 JavaScript 幻灯片

    我希望有与 jQuery Slidedown 类似的效果 但是without使用 jQuery 或任何其他库 我知道这是 可能的 因为 jQuery 中的任何事情都可以用纯 JavaScript 完成 只是更难 我不能使用 jQuery 因
  • WPF DataGridComboBoxColumn 不起作用

    我有一个DataGridComboBoxColumn in a DataGrid in a WPF项目设置如下
  • textarea onclick 删除文本

    我知道如何删除简单的 html 文本框中的文本 但 html 文本区域似乎要复杂得多 您可以将文本放在以下位置之间 而不是 value 属性
  • boost::property_tree::info_parser 在值中的空格处中断

    我面临一个问题 我有一个配置文件 我用 boost property tree info parser 解析它 我使用这段代码来完成这项工作 struct Config std string info 2 boost property tr
  • 网页脚本和内容脚本以及main.js(附加代码)脚本之间的通信[重复]

    这个问题在这里已经有答案了 UPDATE 抱歉 这个例子有效 我发现了一个小错误并在我的完整源代码中修复了 但我还是希望比我更了解的人能够很好地回答这个关于如何实现网页脚本和内容脚本以及main js 附加代码 脚本之间的通信的问题 还请回
  • 使用amazonSNS移动推送时如何确认配送状态?

    我正在使用 AmazonSNS 将推送消息发送到 IOS 设备 我已经得到带有 messageID 的publishResult 有什么办法可以使用这个messageID来检查传递状态吗 无法确认消息是否已送达 但是 看起来有一种方法可以在
  • Array() = range().value

    I saw array range value在一个例子中 我试图理解它是如何工作的 Sub test Dim arr As Variant arr Range E5 E7 Value For i 0 To UBound arr Debug
  • Excel VBA 中的 for 循环

    我正在尝试在 Excel 列上使用 For 循环 这是我的代码 For Each c In Worksheets sheet1 Range A1 A5000 Cells c Offset 0 1 Range A1 Value Right L
  • Linq连接iquery,如何使用defaultifempty

    我写了一个 linq 连接查询 如果其中一个为空 我想获取这些值 Code var Details UnitOfWork FlightDetails Query Join PassengersDetails x gt x Flightno
  • Angular CLI 不会创建新项目

    我正在尝试通过 Angular cli 创建一个项目 名为 ngadmin 但它会在此命令上引发错误 ng new ngadmin 错误是 fs 不支持重新评估本机模块源 如果你是 使用graceful fs模块 请将其更新到更新版本 版本
  • 将文本拆分为段落 NLTK - nltk.tokenize.texttiling 的用法?

    我正在寻找将文档分成段落的方法 我遇到了文本平铺作为一种可能的方法来做到这一点 这是我使用它的尝试 但是 我不明白如何处理输出 我很感激你的帮助 t unidecode doclist 0 decode utf 8 ignore nltk
  • 如何从数据库中随机检索问题?

    我有以下代码
  • 从 HTTP 切换到 HTTPS,失去了所有 Facebook“点赞”

    切换到 https 后 我们所有的文章都失去了 Facebook 的 点赞 计数 因此 我想仅对我们网站的内容区域禁用 https 该区域位于 content php 文章采用 content php 212 My Article 的形式
  • 检查自定义 Twig 函数是否存在,然后调用它

    我测试是否存在自定义 Twig 函数 if methodExist sg datatables render sg datatables render datatable else datatable render datatable en
  • Webview 的 loadData() 在 android 10.0 中不起作用(Q)

    这里我试图将 Html 代码作为字符串加载到 webview 中loadData 此方法没有发生任何事情 但相同的方法在低于 sdk 29 中像魅力一样工作 webview loadData html code text html null
  • Beam/Dataflow 中的批量 PCollection

    我在 GCP Dataflow Apache Beam 中有一个 PCollection 我不需要一一处理 而是需要 按N 组合 就像是grouped N 因此 在有界处理的情况下 它将按批次中的 10 个项目和最后一批中剩余的项目进行分组
  • Java + SSH + Postgres

    我们正在实施一个大学项目 Java 的拼车服务 我们需要解决一个与 如何管理 postgres 服务器 相关的问题 PostgreSQL 数据库配置在名为 golem 130 136 4 sth 的实验室服务器中 只能通过同一子网 130
  • 关于Scala变量可变性的问题

    我明白那个val关键字确定基础变量是不可变类型 以后不能重新分配 现在我在 scala 编程中遇到了一段 第 3 章 scala 中的后续步骤 用类型参数化数组 它指出 val greetStrings Array String new A
  • 等待光标并禁用 java 应用程序

    我想让用户按下按钮来启动后台线程 当线程正在处理时 我希望发生两件事 1 应显示 WAIT CURSOR 2 应用程序不应响应鼠标事件 根据setCursor 文档 当该组件的 contains 方法针对当前光标位置返回 true 时 将显
  • Swift:无法在某些闭包中分解元组(例如,通过枚举减少)?

    当使用map 和enumerate 时 Swift将分解枚举元组 map enumerate 1 2 3 index element in index element 然而 这似乎不能与额外的闭包参数一起使用 例如 使用reduce red