我想知道如何在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'之前的属性初始化程序可用"
答案 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]