访问 class 内的私有数组时出错
Error while accessing private array inside class
当我尝试访问 class (MyArray) 中的私有数组 (arr) 时收到一条错误消息。我想要实现的是创建一个用于反转数组内容的闭包,并且可以使用实例变量从 class 外部调用此闭包。我无法理解这个错误。有人可以帮忙吗!!
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!
}
}
使用延迟 属性 可以访问在闭包外声明的变量。
太...
• 将此 public var reverse =
更改为此 public lazy var reverse =
• 然后在闭包外定义的每个变量前添加 self.
。
请阅读:understand the lazy property
惰性规则:
你不能将 lazy 与 let 一起使用。
您不能将它与计算属性一起使用。
因为,每次我们在计算块内执行代码后尝试访问它时,都会计算出 属性 returns 的值。
您只能对 struct 和 class 的成员使用惰性。
惰性变量不是原子初始化的,因此不是线程安全的。
当我尝试访问 class (MyArray) 中的私有数组 (arr) 时收到一条错误消息。我想要实现的是创建一个用于反转数组内容的闭包,并且可以使用实例变量从 class 外部调用此闭包。我无法理解这个错误。有人可以帮忙吗!!
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!
}
}
使用延迟 属性 可以访问在闭包外声明的变量。
太...
• 将此 public var reverse =
更改为此 public lazy var reverse =
• 然后在闭包外定义的每个变量前添加 self.
。
请阅读:understand the lazy property
惰性规则:
你不能将 lazy 与 let 一起使用。
您不能将它与计算属性一起使用。
因为,每次我们在计算块内执行代码后尝试访问它时,都会计算出 属性 returns 的值。
您只能对 struct 和 class 的成员使用惰性。
惰性变量不是原子初始化的,因此不是线程安全的。