【问题标题】:Using @lazy properties in functions causes build errors在函数中使用 @lazy 属性会导致构建错误
【发布时间】:2014-12-29 20:08:57
【问题描述】:

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

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

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

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

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

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

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

注意:如果我将类移出函数的范围,代码会编译:

class MyClass {
    @lazy var s = ""
}

为什么会失败,应该如何解决这个错误?如果无法解决,还有其他方法可以在函数内部使用@lazy 属性吗?

【问题讨论】:

  • 您举报了吗? bugreport.apple.com
  • 我也遇到了一些导致编译器崩溃的惰性变量问题;就我而言,它与协议一致性有关。需要归档那个雷达。 :|

标签: swift


【解决方案1】:

以下代码适用于我:

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

foo() // prints "qux"

在早期的 Swift 语言版本中似乎有一个错误,已解决。

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 2013-05-31
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      相关资源
      最近更新 更多