2017-05-31 47 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] 
相關問題