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

Sen*_*ful 7 swift

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

func foo() {
    class MyClass {
        var s = ""
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

func foo() {
    class MyClass {
        @lazy var s = ""
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

class MyClass {
    @lazy var s = ""
}
Run Code Online (Sandbox Code Playgroud)

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

aka*_*kyy 0

以下代码对我有用:

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

foo() // prints "qux"
Run Code Online (Sandbox Code Playgroud)

看起来早期 Swift 语言版本中存在一个错误,现已解决。