作者:严志文在吉安_3fu | 来源:互联网 | 2023-02-05 16:43
我有一个swift类,有以下变量:
var pendingFunction = ((Double, Double) -> Double)
斯威夫特告诉我:
类型名称后的预期成员名称或构造函数调用
它坚持我将我的代码更改为:
var pendingFunction = ((Double, Double) -> Double).self
我不知道这.self
件事是做什么的(抱歉,我是Swift的新手)
然后我尝试分配pendingFunction
一个新功能:
pendingFunction = function
其中function
两个双打并返回一个双.
但是,我遇到以下错误:
无法指定'(Double,Double) - > Double'类型的值来键入'((Double,Double) - > Double).Type'
所以我的问题是:做的是.self
什么以及如何正确地为变量分配函数?
1> Robert..:
后缀.self
表达式只是指它作为实例的对象.有点像.this
其他语言.特别是对于类型,它告诉编译器您指的是类型本身,而不是指示它创建该类型的新实例.如果您想了解更多信息,可以在此处的文档中阅读所有相关信息.虽然在很多情况下很有用,但这里并不需要它.
至于你的问题,当你指定:
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"