首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SWIFT5.2闭包中的元组破坏具有不一致的行为

SWIFT5.2闭包中的元组破坏具有不一致的行为
EN

Stack Overflow用户
提问于 2020-04-29 09:04:22
回答 1查看 295关注 0票数 0

我在SWIFT5.2中遇到了一个奇怪的元组破坏问题。我认为元组析构自一段时间以来在闭包参数中不起作用。实际上,以下内容不起作用:

代码语言:javascript
复制
let expected: ((Int, Int)) -> Void = { a, b in  // does not compile
    print(a, b)
}

然而,我注意到以下所有的工作:

代码语言:javascript
复制
func weird(closure: @escaping ((Int, Int)) -> Void) {
    closure((1, 3))
}

// I can understand this
weird { print($0.0 + $0.1) }
weird { a, b in print(a + b) }

// Surprise!
weird { print($0 + $1) }
weird { p in print(p.0 + p.1) }

在斯威夫特5.2之前,最后两个例子有效吗?这种行为在什么地方有记录吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-29 09:39:41

这与Swift 4.0曾被接受的这一提议有关。

SE-0110区分单元组和多参数函数类型

因此,您的两个示例(虽然不是最后两个)在Swift的某个版本中导致了错误,但是Swift团队在这个实现中发现了一些不可接受的回归。补充评注

由于Swift的某个版本(我不记得确切的版本,可能是4.0.x或4.1),您可以将两个参数闭包传递给函数类型的参数,即一个元组。

最近,这一例外被确认为SE-0110的一部分,如果需要更多的修改,将提出一个新的提案,并通过通常的Swift进化过程。

更新SE-0110和SE-0155

审查后的原始建议不包括函数参数从(T, U, ...) -> V((T, U, ...)) -> V的特例转换。作为对社区反馈的回应,这一转换是作为核心小组接受建议的一部分而增加的。

Swift的书可能没有明确的解释这种行为,但它肯定是有记录的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61498023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档