无法使用实例成员“generateRandomNumbers”在属性初始值设定项内;属性初始值设定项在“self”之前运行可用
导入 UIKit
类 ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView1: UITableView!
var array = generateRandomNumbers(size: 1000)
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
tableView1.delegate = self
tableView1.dataSource = self
// var array = self.generateRandomNumbers(size: 1000) // 惰性 var array =generateRandomNumbers(size: 1000)
// print(array) }
func generateRandomNumbers(size: Int) -> [Int] {
guard size > 0 else {
return [Int]()
}
let result = Array(0..<size).shuffled()
return result
}
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var tableView1: UITableView!
var array = generateRandomNumbers(size: 1000)
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
tableView1.delegate = self
tableView1.dataSource = self
// var array = self.generateRandomNumbers(size: 1000)
// lazy var array = generateRandomNumbers(size: 1000)
// print(array)
}
func generateRandomNumbers(size: Int) -> [Int] {
guard size > 0 else {
return [Int]()
}
let result = Array(0..<size).shuffled()
return result
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您要求
var array
从函数generateRandomNumbers()
接收“默认”值。 “默认”值是在视图控制器实例初始化期间设置的,因此在实例存在之前,即在generateRandomNumbers()之前 > 功能存在。在实例创建完成之前,编译器不知道如何为array
赋值。解决方法是设置一个虚拟默认值,然后在初始化期间更改它,如下所示:
You are asking
var array
to receive a "default" value from the functiongenerateRandomNumbers()
. The "default" value is set during the initialisation of the instance of your view controller, so before the instance exists, so before thegenerateRandomNumbers()
function exists. The compiler doesn't know how to give a value toarray
before the instance has finished being created.A workaround is to set a dummy default value, then change it during initialisation, like this:
嗯,基本的答案是理解的概念。
var array =generateRandomNumbers(size: 1000)
当代码被编译时,它首先尝试编译变量。所以此时
self
尚未启动。因此,它无法识别generateRandomNumbers
方法。你得到了错误。最好的解决方案实际上是使用
lazy var array =generateRandomNumbers(size: 1000)
当您使用lazy时,它不会在需要时尝试初始化。所以第一次编译时会跳过它们。
如果您不需要惰性,只需在 viewDidLoad() 中声明它即可
Well, the basic answer is the concept of understanding.
var array = generateRandomNumbers(size: 1000)
When the code is compiled, it first tries to compile the variables first. So at that time,
self
isn't initiated. So, therefore, it doesn't recognize the methodgenerateRandomNumbers
. You get the error.The best possible solution is actually using
lazy var array = generateRandomNumbers(size: 1000)
When you use
lazy
it doesn't try to initialize until it is needed. So they are skipped for the first time compilation.If you don't need lazy simply you have to declare it in the
viewDidLoad()