类型'()'不符合协议'IntegerLiteralConvertible'

时间:2015-01-18 13:34:42

标签: swift

func makeIncrementer() -> (Int -> Int) {
    func addOne(number: Int) -> Int {
        return 1 + number
    }
    return addOne
}

上面是一个简单的示例代码,用于将函数作为Swift中的第一类类型 现在,当我按以下方式调用该函数时:

var increment = makeIncrementer()
increment(7)

它完美地给出了答案

但出于好奇,我尝试了直接的方法,即

makeIncrementer(7)  // error

并且它给出了错误

为什么会这样? 附:我是Swift的初学者

1 个答案:

答案 0 :(得分:3)

调用makeIncrementer()返回该函数,因此要调用它,请在第二组括号中传递参数:

makeIncrementer()(7)

出现错误消息是因为Swift将makeIncrementer(7)解释为传递给7的{​​{1}},而makeIncrementer没有任何参数。希望将来Swift错误消息更加友好。虽然技术上是正确的,但给出的错误信息会导致很多混乱。