2016-05-01 8 views
0

Der folgende Code funktioniert nicht gestattet:Stored Eigenschaft mit Schließung initializer nicht lokale Variable

class Test { 
    let api = "abc" 
    let apiParam = { 
     return ["api": api] 
    }() 
} 

Aber wenn die Konstante api in die apiParam Eigenschaft bewegt wird, erhalte ich Fehlermeldung: „Kann nicht Schließung vom Typ aufrufen {} - > _ mit einer Argumentliste()“

class Test { 
    let apiParam = { 
     let api = "abc" 
     return ["api": api] 
    }() 
} 

Allerdings wird Beseitigung der Fehler, die konstant mit dem tatsächlichen Wert zu ersetzen.

class Test { 
    let apiParam = { 
     return ["api": "abc"] 
    }() 
} 
+0

Gibt es den gleichen Fehler, wenn Sie diese Zeile ersetzen mit: 'return [" api ":" abc "]' – brimstone

+0

@brimstone Es tut es nicht. – Boon

Antwort

1

Es ist nur Swifts kryptische Art, Ihnen zu sagen, dass Sie es nicht genug Typinformation liefern. Normalerweise ist es in der Lage, Typen ziemlich effektiv zu schließen, aber kann manchmal kämpfen, normalerweise um Verschlüsse. Wenn Sie den Typ apiParam explizit definieren, wird der Fehler zurückgewiesen.

class Test { 
    let apiParam:[String:String] = { 
     let api = "abc" 
     return ["api": api] 
    }() 
} 

Obwohl beachten Sie, dass Ihr erstes Beispiel nicht kompiliert - Sie werden einen instance member 'api' cannot be used on type 'Test' Fehler. Dies liegt daran, dass sich self auf die statische Klasse in diesem Bereich und nicht auf eine Instanz bezieht. Dies bedeutet, dass Sie nicht auf die Eigenschaft api zugreifen können.

würden Sie müssen entweder apiParam eine faule Eigenschaft machen (so dass es erstellt wird, wenn Sie zum ersten Mal Zugang es, self bedeutet zum Beispiel beziehen) oder api statisch machen, so dass es auf Klassenebene zur Verfügung steht.

Verwandte Themen