2014-06-05 13 views
6

Sto provando a limitare l'ambito di una classe all'interno di una funzione. Questo sembra funzionare:L'utilizzo di proprietà @lazy nelle funzioni causa errori di compilazione

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

posso creare istanze di MyClass all'interno della funzione foo().

Tuttavia, quando si tenta di aggiungere l'identificatore @lazy a una proprietà ...

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

... Ottengo i seguenti errori di generazione:

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

Nota: Se sposto la classe fuori dall'ambito della funzione, compila il codice:

class MyClass { 
    @lazy var s = "" 
} 

Perché questo non funziona, e come dovrebbe essere risolto questo errore? Se non può essere risolto, esiste un altro modo per utilizzare le proprietà @lazy all'interno delle funzioni?

+1

Hai segnalato questo? https://bugreport.apple.com/ – aleclarson

+0

Ho anche avuto alcuni problemi con lazy vars che causavano arresti anomali del compilatore; nel mio caso era legato alla conformità del protocollo. Hai bisogno di archiviare quel radar. : | – cmyr

risposta

0

Il seguente codice funziona per me:

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

foo() // prints "qux" 

Sembra che c'era un bug nei primi versione laguage Swift, che è stato reolved.

0

Posso confermare l'osservazione di akashivskyy. L'ho provato come bene e il presente codice funziona anche per me:

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

foo() // "string" is printed 

Non è la prima volta per me che in realtà ho incontrato alcuni problemi nelle versioni precedenti Swift. Voglio dire che è ancora una lingua piuttosto giovane e quindi ha sempre bisogno di miglioramenti e correzioni di bug.

Si sta utilizzando la versione più recente di Swift e Xcode?

Problemi correlati