Xcode 9中Swift 4的光泽项目之后
我收到以下错误,我不知道
闭包元组参数’(键:,值:)’不支持解构
码:
extension Dictionary
{
init(elements: [Element]) {
self.init()
for (key, value) in elements {
self[key] = value
}
}
func flatMap<KeyPrime, ValuePrime>(_ transform: (Key, Value) throws -> (KeyPrime, ValuePrime)?) rethrows -> [KeyPrime:ValuePrime] {
return Dictionary<KeyPrime, ValuePrime>(elements: try flatMap({ (key, value) in
return try transform(key, value)
}))
}
}
此时出现错误 try flatMap({ (key, value)in
让我们从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)
}))
}
但这并不能说服我。因为Kotlin支持,而普通if在该角色中也很好。 我认为有时比普通的,尽管我想知道为什么Kotlin不支持?
闭包定义 我们可以使用闭包的方式定义一些特殊需求的路由,而不需要执行控制器的操作方法了,例如: Route::get('hello', function () { return 'hello,world!'; }); 参数传递 闭包定义的时候支持参数传递,例如: Route::get('hello/:name', function ($name) { return 'Hello,'
我正在尝试‘获取’一个rss提要。 当我检查“res”里面是什么的时候。它似乎得到了整个XML。但后来,我试图解码它,我得到:
解释:这个问题更多的是关于Kotlin的设计意图。许多表达式语言同时支持和[例如,Ruby、Groovy.] 首先,我知道Groovy同时支持和:Groovy中的三元运算符。所以我不认为这是语法问题。 然后官方文件说: 在Kotlin中,if是一个表达式,即它返回一个值。因此不存在三元运算符(condition?then:else),因为普通if在这个角色中工作得很好。 这也不能说服我。因为Kot
问题内容: 我无法连接到SQL Server,项目的连接字符串为: 我收到此错误: 不支持的关键字:“元数据” 如何解决此错误? 问题答案: 该连接字符串仅受实体框架支持。(公平地说,关键字“ entities”在键名中!)如果要在ADO原始连接中使用连接字符串,请除去字符串部分之外的所有内容,包括s: 更改为: