2017-04-25 8 views
5

fonksiyonu atayarak aşağıdaki değişkenle hızlı bir sınıf varSwift:</p> <pre><code>var pendingFunction = ((Double, Double) -> Double) </code></pre> <p>Swift sonra bana söyler: Değişken

:

Expected member name or constructor call after type name

Ben benim kodunu değiştirmek konusunda ısrar

Bu .self öğesinin ne işe yaradığına dair bir ipucum yok (üzgünüm, yeni olduğum için üzgünüm)

Sonra yeni bir işleve pendingFunction atamak deneyin: function iki Çiftler alır ve bir Double döndürür

pendingFunction = function 

.

Ancak, aşağıdaki hata ile sunulan ediyorum:

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

Yani benim soru: Ne yapıyor .self şey nedir ve nasıl düzgün değişkene bir fonksiyon atayabilirsiniz?

+5

Sen isteyeceksiniz: Burada

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

yapılan her şey bir örnek:

yerine değer olarak bir tür atama, onun türü olarak o tip değişken bildirmek istiyorum 'var pendingFunction: ((Çift, İkili) -> Çift)' işlev türünün bir değişkenini bildirir. –

+1

'var pendingFunction: ((Çifte, Çifte) -> Çifte) = {birinciDouble, secondDouble/* burada birşeyler yaparsınız * /}' o zaman 'arayalım' diyebilirizDouble = pendingFunction (double1, double2) ' – ObjectAlchemist

+1

Bu, gerçek bir işlev yerine işlev türünü atadığınız anlamına gelir. Örneğin, "var someInt: Int", buna belirli bir Int değeri atayacağınız anlamına gelir; "var someInt = Int.self", Int türünü bir bütün olarak temsil etmek için kullandığınız anlamına gelir. –

cevap

10

İfadenin .self ifadesi, yalnızca bir örneğinin olduğu nesneyi ifade eder. Diğer dillerde .this gibi. Özellikle türler için, derleyiciye, bu türden yeni bir örnek oluşturmak için talimat vermek yerine, yazının kendisine atıfta bulunduğunuzu bildirir. Daha fazlasını öğrenmek isterseniz, tüm bu dokümanları here dokümanlarında okuyabilirsiniz. Birçok durumda faydalı olsa da, burada gerçekten gerekli değildir. senin sorununa gelince

, atamak oluşur: değer değişkenin olarak işlev belirli bir tür tip atıyorsanız

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

. Bundan yola çıkarak, değişkenin tipType olması gerektiğine dikkat çeker. Daha sonra, bu tür bir değer olarak uygun bir fiili işlev atamaya çalıştığınızda, bir işlev değil, bir tür beklediği için bir hata atar.

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

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

pendingFunction = myAdditionFunction 

print(pendingFunction(1,2)) // prints "3.0" 
İlgili konular