栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

封闭元组不支持Xcode 9 Swift 4中的解构

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

封闭元组不支持Xcode 9 Swift 4中的解构

让我们从

flatMap
以下的字典定义开始:

func flatMap(_ transform: (Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]

您会看到

transform
闭包仅接受 一个 类型的 参数
Element
其中
Element
typealias
是元组的a:

public typealias Element = (key: Key, value: Value)

因此,闭包的第一个 也是唯一的 参数应该是两个元素(

key
type
Key
value
type
Value
)的元组。


现在,如果您看一下代码(在Swift 3中编译),您会发现情况并非如此,并且您应该问为什么在Swift 3中也能工作。

try flatMap({ (key, value) in    return try transform(key, value)})

您的闭包使用2个参数,而不是一个(

key
type
Key
value
type
Value
)。由于有一种称为 解构
的功能,该功能可在Swift 3中工作,在该功能下,编译器会将2个元素的元组自动转换为2个参数。

但是此功能很奇怪,很少使用,并且在大多数情况下会产生意想不到的结果,因此已在Swift 4中删除。
编辑 :如OOPer所指出,此功能已在Swift 4 beta中暂时删除,但应在之前重新添加最终版本已经发布。

相反,您应该写:

try flatMap({ tupleArgument in    return try transform(tupleArgument.key, tupleArgument.value)})

并且您的

flatMap
功能变为:

func flatMap<KeyPrime, ValuePrime>(_ transform: (Key, Value) throws -> (KeyPrime, ValuePrime)?) rethrows -> [KeyPrime:ValuePrime] {    return Dictionary<KeyPrime, ValuePrime>(elements: try flatMap({ element in        return try transform(element.key, element.value)    }))}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484578.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号