2014-06-05 38 views
6

我想限制一個函數內的類範圍。這似乎工作:在函數中使用@lazy屬性導致構建錯誤

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

我可以在foo()函數內創建MyClass的實例。

然而,當我試圖將@Lazy符添加到屬性...

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

...我碰到下面的編譯錯誤:

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

注意:如果我將該課程移出該功能的範圍,代碼將編譯爲:

class MyClass { 
    @lazy var s = "" 
} 

這是爲什麼會失敗,應該如何解決這個錯誤?如果它不能解決,是否有另一種方法來在函數內部使用@lazy屬性?

+1

您報告此點? https://bugreport.apple.com/ – aleclarson

+0

我也有一些懶惰的變量導致編譯器崩潰的問題;在我的情況下,它與協議一致性有關。需要提交該雷達。 :| – cmyr

回答

0

下面的代碼對我的作品:

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

foo() // prints "qux" 

看起來有早期斯威夫特laguage版本,這已經reolved的錯誤。

0

我可以證實akashivskyy的觀察。我已經嘗試過了,以及與此代碼的工作對我來說還有:

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

foo() // "string" is printed 

這並不是說我實際上在早期版本的雨燕遇到的一些問題,在第一時間給我。我的意思是它仍然是一個非常年輕的語言,因此它總是需要一些改進和錯誤修復。

您使用的是最新版本的Swift和Xcode嗎?