【问题标题】:"Instance member cannot be used on type" error in lazy property [duplicate]惰性属性中的“实例成员不能用于类型”错误[重复]
【发布时间】:2016-06-29 16:10:57
【问题描述】:

请帮我解决这个问题或告诉我声明这个属性的正确方法。

// MARK: Properties
var expensiveItems = [Item]()
var cheapItems = [Item]()

lazy var allItems: [[Item]] = {
    return [cheapItems, expensiveItems]
}()

【问题讨论】:

  • 为什么变量中有return
  • @Rana 他将闭包的结果分配给他延迟加载的属性,这在 Swift 中完全有效。 See here for more info.
  • @originaluser2 谢谢,我以前从未见过。
  • @originaluser2 谢谢你的帮助,我的疏忽

标签: arrays swift


【解决方案1】:

因为您将闭包的结果分配给延迟加载的属性 - 您需要遵循闭包规则。其中一项规则是,如果您指的是self - 您必须明确地这样做。 (虽然这不适用于@noescape 闭包——但无论如何你不能在这里使用它们)

这只是为了让您承认您正在捕获并保留self,但由于它是一个延迟加载的属性,它不应该导致保留循环,因为它只被调用一次,然后分配它的结果到物业。

因此您需要使用self.cheapItemsself.expensiveItems

// MARK: Properties
var expensiveItems = [Item]()
var cheapItems = [Item]()

lazy var allItems: [[Item]] = {
    return [self.cheapItems, self.expensiveItems]
}()

【讨论】:

    猜你喜欢
    • 2016-03-17
    • 2019-02-15
    • 2020-11-30
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    相关资源
    最近更新 更多