2014-06-05 6 views
6

Ich versuche, den Klassenbereich innerhalb einer Funktion zu beschränken. Dies scheint zu funktionieren:Die Verwendung von @lazy-Eigenschaften in Funktionen führt zu Buildfehlern.

func foo() { 
    class MyClass { 
     var s = "" 
    } 
} 

Ich kann Instanzen von MyClass innerhalb der Funktion foo() erstellen.

Allerdings, wenn ich die @lazy Spezifizierer auf eine Eigenschaft hinzuzufügen versuchen ...

func foo() { 
    class MyClass { 
     @lazy var s = "" 
    } 
} 

... Ich werde nach dem Fehler bauen:

  • Global is external, but doesn't have external or weak linkage!
  • invalid linkage type for function declaration
  • LLVM ERROR: Broken module found, compilation aborted!

Hinweis: Wenn ich die Klasse aus dem Gültigkeitsbereich der Funktion verschiebe, kompiliert der Code:

class MyClass { 
    @lazy var s = "" 
} 

Warum ist dies nicht möglich, und wie sollte dieser Fehler behoben werden? Wenn es nicht gelöst werden kann, gibt es eine andere Möglichkeit, @lazy-Eigenschaften in Funktionen zu verwenden?

+1

Haben Sie dies gemeldet? https://bugreport.apple.com/ – aleclarson

+0

Ich hatte auch einige Probleme mit faul Vars verursacht Compiler Abstürze; in meinem Fall war es mit Protokollkonformität verbunden. Müssen Sie dieses Radar einlegen. : | – cmyr

Antwort

0

Der folgende Code funktioniert für mich:

func foo() -> String { 
    class bar { 
     lazy var baz = "qux" 
    } 
    return bar().baz 
} 

foo() // prints "qux" 

Sieht aus wie es ist ein Fehler in der frühen Swift laguage Version war, die reolved wurde.

0

Ich kann Akashivskyys Beobachtung bestätigen. Ich habe es versucht, so gut und die dieser Code funktioniert für mich auch:

func foo() { 
    class MyClass { 
     var variable = "string" 
    } 
    let instance = MyClass() 
    println(instance.variable) 
} 

foo() // "string" is printed 

Es ist nicht das erste Mal für mich, dass ich tatsächlich einige Probleme in früheren Versionen Swift begegnet ist. Ich meine, es ist immer noch eine ziemlich junge Sprache und daher braucht es immer einige Verbesserungen und Fehlerbehebungen.

Verwenden Sie die neueste Version von Swift und Xcode?

Verwandte Themen