如何处理WWDC 2014中有关Swift代码的一行错误

如何处理WWDC 2014中有关Swift代码的一行错误,swift,Swift,我按照WWDC 2014第403课时在游乐场文件中编写代码: var onChange:(Int)->Void = {} 但我有一个错误:“Int”不是“{}”的子类型,为什么?那一行与视频中的那一行完全相同 整个代码是: class TemperatureNotifier { var onChange:(Int)->Void = {} var currentTemp = 72 init() { onChange =

我按照WWDC 2014第403课时在游乐场文件中编写代码:

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页:“如果在闭包表达式中使用这些速记参数名称,可以从其定义中省略闭包的参数列表,速记参数名称的数量和类型将从预期的函数类型中推断出来。”