Die Schließung, die Sie foo zuweisen, ist unabhängig von Ihrer LMAO-Klasse, also hat sie kein "self".
Wenn Sie Ihre Foo-Variable mit Code aus dem Selbst der aktuellen Instanz initialisieren möchten, müssen Sie die Lazy-Initialisierung verwenden. Sie müssen auch irgendwie mit der aktuellen Instanz verlinken (eine einfache Schließung wird es nicht tun).
der einfachste Weg wäre wahrscheinlich eine defaultFoo Funktion Ihrer Klasse und weisen Sie als Anfangswert hinzuzufügen:
class LMAO: LOL
{
lazy var foo: ((String) -> Bool)? = self.defaultFoo
func defaultFoo (_ lol: String) -> Bool
{
self.rofl()
return true
}
func rofl() {}
}
An diesem Punkt werden Sie wahrscheinlich eine optionale sein nicht foo müssen, aber das ist wie du willst.
Dies ist das gleiche Problem wie in [So initialisieren Sie Eigenschaften, die voneinander abhängen] (http://stackoverflow.com/questions/25854300/how-to-initialize-properties-that-depend-on-e-ach- andere). Die 'foo' Eigenschaft' faul' zu machen ist eine mögliche Lösung. –