Swift:将函数赋值给变量

Jam*_*man 17 swift

我有一个swift类,有以下变量:

var pendingFunction = ((Double, Double) -> Double)
Run Code Online (Sandbox Code Playgroud)

斯威夫特告诉我:

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

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

var pendingFunction = ((Double, Double) -> Double).self
Run Code Online (Sandbox Code Playgroud)

我不知道这.self件事是做什么的(抱歉,我是Swift的新手)

然后我尝试分配pendingFunction一个新功能:

pendingFunction = function
Run Code Online (Sandbox Code Playgroud)

其中function两个双打并返回一个双.

但是,我遇到以下错误:

无法指定'(Double,Double) - > Double'类型的值来键入'((Double,Double) - > Double).Type'

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

Rob*_*ert 28

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

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

var pendingFunction = ((Double, Double) -> Double).self
Run Code Online (Sandbox Code Playgroud)

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

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

var pendingFunction: ((Double, Double) -> Double)
Run Code Online (Sandbox Code Playgroud)

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

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

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

pendingFunction = myAdditionFunction

print(pendingFunction(1,2)) // prints "3.0"
Run Code Online (Sandbox Code Playgroud)