在函数中使用@lazy属性会导致生成错误

时间:2014-06-05 05:35:23

标签: swift

我试图将类范围限制在函数内。这似乎有效:

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

我可以在foo()函数中创建MyClass的实例。

但是,当我尝试将@lazy说明符添加到属性...

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

...我收到以下构建错误:

  
      
  • 全球是外部的,但没有外部或弱联系!
  •   
  • 函数声明的链接类型无效
  •   
  • LLVM ERROR:找到损坏的模块,编译中止!
  •   

注意:如果我将类移出函数的作用域,代码将编译:

class MyClass {
    @lazy var s = ""
}

为什么会失败,如何解决此错误?如果无法解决,是否有另一种在函数内使用@lazy属性的方法?

2 个答案:

答案 0 :(得分:0)

以下代码适用于我:

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

foo() // prints "qux"

看起来早期的Swift laguage版本中有一个错误,已经得到了解决。

答案 1 :(得分:0)

我可以确认akashivskyy的观察。我也试过了,这段代码也适用于我:

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

foo() // "string" is printed

对于我而言,我实际上在早期的Swift版本中遇到过一些问题并不是第一次。我的意思是它仍然是一种非常年轻的语言,因此它总是需要一些改进和错误修复。

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