2014-06-05 19 views
6

Próbuję ograniczyć zakres klasy do funkcji. To wydaje się działać:Użycie @lizy właściwości w funkcjach powoduje błędy kompilacji

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

Mogę utworzyć wystąpienia MyClass w funkcji foo().

Jednak gdy próbuję dodać specyfikator @lazy do nieruchomości ...

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

... pojawia się następujący zbudować błędy:

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

Uwaga: Jeśli usuniemy klasę z zakresu funkcji, kod skompiluje:

class MyClass { 
    @lazy var s = "" 
} 

Dlaczego to się nie udaje i jak ten problem powinien zostać rozwiązany? Jeśli nie można go rozwiązać, czy istnieje inny sposób korzystania z właściwości @lazy w funkcjach?

+1

Złożyłeś zgłoszenie? https://bugreport.apple.com/ – aleclarson

+0

Mam też pewne problemy z leniwymi varsami powodującymi awarie kompilatora; w moim przypadku dotyczyło to zgodności z protokołem. Musisz zgłosić ten radar. : | – cmyr

Odpowiedz

0

Poniższy kod działa dla mnie:

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

foo() // prints "qux" 

Wygląda na to, że był to błąd w wczesnej wersji laguage Swift, która została reolved.

0

Mogę potwierdzić obserwację akashivskyy. Próbowałem go także i ten kod działa dla mnie, a także:

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

foo() // "string" is printed 

To nie jest pierwszy raz dla mnie, że ja rzeczywiście napotkał pewne problemy we wcześniejszych wersjach Swift. Mam na myśli to, że wciąż jest bardzo młodym językiem i dlatego potrzebuje zawsze pewnych ulepszeń i poprawek.

Czy używasz najnowszej wersji Swift i Xcode?

Powiązane problemy