2017-04-25 75 views
5

分配功能我有迅速的一類具有下列變量:斯威夫特:可變

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

斯威夫特然後告訴我:

Expected member name or constructor call after type name

它堅持認爲,我在我的代碼更改爲:

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

我不知道這.self事情在做什麼(抱歉,我是新來的斯威夫特)

然後我嘗試分配pendingFunction到一個新的功能:

pendingFunction = function 

其中function需要兩個雙打,並返回一個雙。

不過,我出現以下錯誤:

Cannot assign value of type '(Double,Double) -> Double' to type '((Double,Double)->Double).Type'

所以我的問題是:什麼是.self事情做,我怎麼能正確地分配給變量的函數嗎?

+5

你會想'var pendingFunction:((Double,Double) - > Double)'聲明一個函數類型的變量。 –

+1

'var pendingFunction:((Double,Double) - > Double)= {firstDouble,secondDouble in/* do you stuff here//}'then then let'let resultDouble = pendingFunction(double1,double2)' – ObjectAlchemist

+1

至於.self ,這意味着你正在分配函數的類型,而不是實際的函數。例如,'var someInt:Int'表示您將爲其指定一個特定的Int值,而'var someInt = Int.self'則意味着您將它用作整體表示Int類型。 –

回答

10

後綴.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"