2017-05-31 46 views
0

里面我想知道我怎么能在前面提到的变量一个让内调用。我正在使用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] 

当我尝试在咱们命令使用变量,则返回“不能使用实例成员“蜜蜂水平'属性初始值设定项中的属性初始值设定项'可用'之前'

+1

看这https://stackoverflow.com/a/25856755/1825618 – Bilal

+0

请[上一个错误的搜索(https://stackoverflow.com/search?q=%5Bswift%5D+Cannot+use+instance+member+within+属性+初始化程序%3B +属性+初始化程序+之前+%27self%27 + + +可用)。 – rmaddy

回答

1

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

let beeslevel = [beelevel, wasplevel, bumblebeelevel] 

但是你可以用计算出的属性:

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

宣布这样的变量在任何特定的顺序不被初始化,所以没有办法,以确保初始化beesLevelsbeeLevel将可用。

你可以做的是覆盖初始化,应该有两个为UIViewController

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

required init?(coder aDecoder: NSCoder) { 
} 

初始化您beesLevels不断在那里,然后调用超。

PS。即使你改变了“levels”变量,你仍然会在你的beesLevels数组中得到一个0的数组,因为它是存储的值,而不是指向变量的指针。

如果希望数组始终是最新的这些值,您可以像这样把它声明:

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

+0

我是新来的迅速,所以我不太清楚你坚持我做什么......有无论如何,你可能会更清楚?谢谢 – Traxido

0

您可以使用延迟初始化来实现这一目标:

lazy var beeslevel:[Int] = [self.beelevel, self.wasplevel, self.bumblebeelevel] 
相关问题