首页 > 解决方案 > 访问类内的私有数组时出错

问题描述

当我尝试访问类 (MyArray) 中的私有数组 (arr) 时,我收到一条错误消息。我想要实现的是创建一个用于反转数组内容的闭包,并且可以使用实例变量从类外部调用这个闭包。我无法理解这个错误。有人可以帮忙吗!

public class MyArray {
private var arr: [Int] = []
internal static var instance: MyArray?

public var reverse = { () -> [Int] in
        var returnArray : [Int] = []
        var counter = arr.count - 1 // Error: Instance member 'arr' cannot be used on type 'MyArray'

        for _ in (0...arr.count - 1) { // Error: Instance member 'arr' cannot be used on type 'MyArray'
            returnArray.append(arr[counter])
            counter -= 1
        }
        return returnArray
}

private init() {}

public static func getInstance() -> MyArray {
    if self.instance == nil {
        self.instance = MyArray()
    }
    return self.instance!
}
}

标签: swift4.1

解决方案


使用惰性属性能够访问在闭包之外声明的变量。

呜呜……

• 将此更改public var reverse =为此public lazy var reverse =

• 然后self.在闭包外定义的每个变量前面添加。

请阅读:了解惰性属性

懒惰的规则:

您不能将惰性与 let 一起使用。

您不能将其与计算属性一起使用。

因为,每次我们在执行计算块内的代码后尝试访问它时,计算属性都会返回该值。

您只能对 struct 和 class 的成员使用惰性。

惰性变量不是原子初始化的,因此不是线程安全的。


推荐阅读