如何处理WWDC 2014中有关Swift代码的一行错误
我按照WWDC 2014第403课时在游乐场文件中编写代码:如何处理WWDC 2014中有关Swift代码的一行错误,swift,Swift,我按照WWDC 2014第403课时在游乐场文件中编写代码: var onChange:(Int)->Void = {} 但我有一个错误:“Int”不是“{}”的子类型,为什么?那一行与视频中的那一行完全相同 整个代码是: class TemperatureNotifier { var onChange:(Int)->Void = {} var currentTemp = 72 init() { onChange =
var onChange:(Int)->Void = {}
但我有一个错误:“Int”不是“{}”的子类型,为什么?那一行与视频中的那一行完全相同
整个代码是:
class TemperatureNotifier {
var onChange:(Int)->Void = {}
var currentTemp = 72
init() {
onChange = { temp in
self.currentTemp = temp
}
}
}
有人知道原因吗?至少在我们可以访问的当前版本的Swift中,我发现如果在闭包中有任何参数,就会弹出这种错误。为了修复它,您必须以语法中的
关闭:
class TemperatureNotifier {
var onChange : (Int) -> Void = {x in}
var currentTemp = 72
init() {
self.onChange = { temp in
self.currentTemp = temp
}
}
}
这看起来很愚蠢——特别是因为你从一个会话视频中得到了这段代码——这可能是Swift中的一个bug。你应该在。@MechEthan上提交一份对我不起作用的bug报告。你的代码可以编译吗?@CezaryWojcik抱歉,在清理了一些周围的代码后,它无法工作。-我很确定我还有其他东西隐藏着这个问题。(由于信息错误,删除了我原来的评论。)非常感谢!我已经向苹果公司提交了一个bug#17227104。可能与此有关:我注意到,numbers.map{n in“test”}
可以工作,但numbers.map{“test”}
是一个错误。尽管奇怪的是,numbers.map{String($0)}
不是。TSPL的第161页:“如果在闭包表达式中使用这些速记参数名称,可以从其定义中省略闭包的参数列表,速记参数名称的数量和类型将从预期的函数类型中推断出来。”