我在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
做了什么,如何正确地为变量分配函数?
答案 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"