Swift:将函数赋值给变量

时间:2017-04-25 20:11:30

标签: swift

我在swift中有一个使用以下变量的类:

var pendingFunction = ((Double, Double) -> Double)
然后斯威夫特告诉我:

  

类型名称后的预期成员名称或构造函数调用

它坚持要将我的代码更改为:

var pendingFunction = ((Double, Double) -> Double).self

我不清楚这.self事情是做什么的(对不起,我是Swift的新手)

然后我尝试将pendingFunction分配给新功能:

pendingFunction = function

其中function获得两个双打并返回一个Double。

但是,我遇到以下错误:

  

无法指定类型的值'(Double,Double) - > Double'to type'((Double,Double) - > Double).Type'

所以我的问题是:.self做了什么,如何正确地为变量分配函数?

1 个答案:

答案 0 :(得分:24)

postfix .self表达式只是指它所属的对象。有点像.this在其他语言中。对于特定类型,它告诉编译器您指的是类型本身,而不是指示它创建该类型的新实例。如果您想了解更多信息,可以在文档here中阅读所有相关信息。虽然在很多情况下很有用,但这里并不需要它。

至于你的问题,当你指定:

var pendingFunction = ((Double, Double) -> Double).self

您将某种特定功能的类型指定为变量的。由此,Swift推断变量的类型应为Type。然后,当您尝试分配一个将该类型作为值的实际函数时,它会抛出一个错误,因为它期望一个类型,而不是一个函数。

您希望将该类型的变量声明为其类型,而不是将类型指定为值:

var pendingFunction: ((Double, Double) -> Double)

以下是整个事情的一个例子:

var pendingFunction: ((Double, Double) -> Double)

func myAdditionFunction (first: Double, second: Double) -> Double {
    return first + second
}

pendingFunction = myAdditionFunction

print(pendingFunction(1,2)) // prints "3.0"