arrays - 惰性属性中的 "Instance member cannot be used on type"错误

标签 arrays swift

<分区>

I wonder this error

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

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

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

最佳答案

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

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

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

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

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

关于arrays - 惰性属性中的 "Instance member cannot be used on type"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35990637/

相关文章:

java - 来自用字段值初始化的数组的 ArrayIndexOutOfBoundsException

ios - NSRangeException 与 PHFetchResult

swift - 执行 swift3 错误

ios - 在 ViewController 中实现 ResearchKit 以进行调查

将指针数组值复制到 C 中另一个数组的末尾

javascript - 从 API 响应迭代嵌套的 Javascript 对象

python - 确定两个列表/数组的混洗索引

Javascript/JSP随机排序两个相等的字符串数组

swift - 如何检查字符串是否包含 Swift 5 中的多个字符

ios - layoutSubviews() 和 viewWillLayoutSubviews() 的区别