使用对象属性填充表视图?

时间:2015-06-03 02:45:31

标签: ios swift

我在UITableViewController中创建了一个包含两个属性的自定义类:

import UIKit

class FirstTableViewController: UITableViewController {

class Continent {

    var name: String = "Country name"
    var continentCountries: NSArray = ["countries of selected continent"]
}

现在我创建了几个对象并将它们放在一个数组中:

func setup() { 
var asia = Continent()
    asia.name = "Asia"
    asia.continentCountries = ["Afghanistan","Armenia","Azerbaijan","Bahrain"] //etc..

var africa = Continent()
africa.name = "Africa"
africa.continentCountries = ["Egypt","Sierra Leone","Sudan","South Africa"] //etc..

var northAmerica - Continent() 
northAmerica.name = "North America"
northAmerica.continentCountries = ["Canada","United States of America","Mexico"] 

let theWorld = [asia,africa,northAmerica] 

}

注意我必须用“func setup()”方法声明我新创建的对象和我的数组,因为它们不被识别为“Continent”对象而是“FirstTableViewController”对象

现在我的目标是填充下面的表视图,每个对象的第一个属性是“name”,我使用了以下代码:

let aContinent = theWorld[indexPath.row] as! Continent
cell.textLabel.text = aContinent.name

现在的问题是,setup()方法以外的任何内容,控制器都无法识别,并标记为“未声明”,因此我无法将代码添加到{{1}的任何协议代理中存在:

TableViewController

应该纠正什么?我如何允许我新创建的类及其对象与初始override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 3 //this is just a temporary Int } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! UITableViewCell return cell 类一起执行,以便我可以填充此表视图?

3 个答案:

答案 0 :(得分:0)

声明这样的属性,以便您可以在委托方法

中使用它
class FirstTableViewController: UITableViewController {

class Continent {

    var name: String = "Country name"
    var continentCountries: NSArray = ["countries of selected continent"]
}
let theWorld:[Continent] = {
    var asia = Continent()
    asia.name = "Asia"
    asia.continentCountries = ["Afghanistan","Armenia","Azerbaijan","Bahrain"] //etc..

    var africa = Continent()
    africa.name = "Africa"
    africa.continentCountries = ["Egypt","Sierra Leone","Sudan","South Africa"] //etc..

    var northAmerica = Continent()
    northAmerica.name = "North America"
    northAmerica.continentCountries = ["Canada","United States of America","Mexico"]

     return  [asia,africa,northAmerica]
    }()
 override func numberOfSectionsInTableView(tableView: UITableView) -> Int {

    return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return theWorld.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
{
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
    cell.textLabel?.text = theWorld[indexPath.row].name
    return cell
}
}

截图

enter image description here

答案 1 :(得分:0)

欢迎来到SO。

你好像很困惑。您不希望theWorld变量成为设置函数的局部变量。您希望它是FirstTableViewController类的实例var,并且您希望setup是该类的实例方法。 (定义在班级的大括号内。)

答案 2 :(得分:0)

试试这个:

DataBase