如何在let命令中添加先前声明的变量

时间:2017-05-31 07:56:27

标签: ios swift

我想知道如何在let中调用之前声明的变量。我正在使用Xcode版本8.3.2(8E2002)。

我创建了一个TableView,它显示了我的玩家(蜜蜂)和当前关卡。我希望能够升级特定的玩家,而不会影响其他玩家。

这是我目前对表格视图的编码:

ViewController.swift

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

var beelevel = 0
var wasplevel = 0
var bumblebeelevel = 0

let bees = ["bee", "wasp", "bumblebee"]
let beeslevel = [beelevel, wasplevel, bumblebeelevel]

当我尝试在let命令中使用变量时,它会返回"不能使用实例成员' bee level'在属性初始化器内;属于' self'之前的属性初始化程序可用"

3 个答案:

答案 0 :(得分:1)

在声明coz self尚未完全初始化时,您无法使用实例成员:

let beeslevel = [beelevel, wasplevel, bumblebeelevel]

但你可以使用计算属性:

var beeslevel: [Int] {
    return [beelevel, wasplevel, bumblebeelevel]
}

答案 1 :(得分:1)

如此声明的变量未按任何特定顺序初始化,因此在初始化beeLevel时无法确定beesLevels是否可用。

您可以做的是覆盖初始值设定项,UIViewController应该有两个:

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
}

required init?(coder aDecoder: NSCoder) {
}

在那里初始化你的beesLevels常数,然后调用super。

PS。只是抬头,即使你改变了“级别”变量,你总是会在beesLevels数组上得到一个0的数组,因为它是存储的值,而不是指向变量的指针。

如果您希望该数组始终与这些值保持同步,您可以这样声明:

var beesLevels: [Int] { return [beelevel, wasplevel, bumblebeelevel] }

答案 2 :(得分:0)

您可以使用延迟初始化来实现此目的:

 lazy var beeslevel:[Int] = [self.beelevel, self.wasplevel, self.bumblebeelevel]