swift4.1 - 访问类内的私有数组时出错
问题描述
当我尝试访问类 (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!
}
}
解决方案
使用惰性属性能够访问在闭包之外声明的变量。
呜呜……
• 将此更改public var reverse =
为此public lazy var reverse =
• 然后self.
在闭包外定义的每个变量前面添加。
请阅读:了解惰性属性
懒惰的规则:
您不能将惰性与 let 一起使用。
您不能将其与计算属性一起使用。
因为,每次我们在执行计算块内的代码后尝试访问它时,计算属性都会返回该值。
您只能对 struct 和 class 的成员使用惰性。
惰性变量不是原子初始化的,因此不是线程安全的。
推荐阅读
- powerbi - Power BI 网关管理员
- javascript - 函数作为 React 子级无效。- React 中的功能组件
- flutter - 你能告诉我更多关于全局配置的信息吗
- node.js - findOneAndUpdate 似乎适用于 Robo 3T,但 POST 请求通过 Axios 导致“待处理”
- c++ - 无法获得问题所需的输出
- php - 为什么我的 PHP 代码从 MySQL 查询返回不正确的结果?
- enterprise-architect - Sparx Enterprise Architect 中的弹出菜单
- form-submit - Cypress 表单提交下载文件问题测试失败
- smartcard - 如何从读取记录结果中识别卡号、有效期、cvv、持卡人姓名
- node.js - 平均堆栈中的注销按钮功能,如何使会话过期?