Ios 在TableViewController中显示嵌套数组

Ios 在TableViewController中显示嵌套数组,ios,arrays,swift,uitableview,Ios,Arrays,Swift,Uitableview,很抱歉,如果这只是Swift中表格的一个基本概念,但我对Swift非常陌生,花了相当长的时间试图解决这个问题,但运气不佳 我有一个名为“Data”的数组,其结构如下: var Data = [ ["Alex","25","Male","258475"], ["Sean","29","Male","145737"], ["Grace","34","Female","295049"], ... ] 我想在TableViewController中展示这一点,这样每个单元格都包含姓名、年龄、性别和ID

很抱歉,如果这只是Swift中表格的一个基本概念,但我对Swift非常陌生,花了相当长的时间试图解决这个问题,但运气不佳

我有一个名为“Data”的数组,其结构如下:

var Data = [
["Alex","25","Male","258475"],
["Sean","29","Male","145737"],
["Grace","34","Female","295049"],
...
]
我想在TableViewController中展示这一点,这样每个单元格都包含姓名、年龄、性别和ID。我发现的大多数示例都使用不同方式的数据结构:

var Data = [
["Alex","Sean","Grace"],
["25","29","34"],
["Male","Male","Female"],
...
]

有没有一种方法可以使用我拥有的数据结构并在表视图的行中显示它?还是重组数据会更好?谢谢

嵌套多个数组作为表视图数据源是最糟糕的选择。永远不要用那些

通常和推荐的选择是自定义结构

enum Gender {
    case male, female
}

struct Person {
    let name, id : String 
    let age : Int 
    let gender : Gender
}

let people = [Person(name:"Alex", id: "258475", age: 25, gender: .male),
              Person(name:"Sean", id: "145737", age: 29, gender: .male),
              Person(name:"Grace", id: "295049", age: 34, gender: .female)]

...

嵌套多个数组作为表视图数据源是最糟糕的选择。永远不要用那些

通常和推荐的选择是自定义结构

enum Gender {
    case male, female
}

struct Person {
    let name, id : String 
    let age : Int 
    let gender : Gender
}

let people = [Person(name:"Alex", id: "258475", age: 25, gender: .male),
              Person(name:"Sean", id: "145737", age: 29, gender: .male),
              Person(name:"Grace", id: "295049", age: 34, gender: .female)]

...

在我看来,有几种方法可以做到这一点。您可以创建一个包含每个人的结构,并具有这些人的数组。像这样的事

struct Person {
   var name: String 
   var age: String
   var gender: String
   var id: String
}
然后将数据存储在数组中

var数据=[个人]

然后在表格单元格中,可以设置要显示的每个项目的标签

或者,您可以通过一种简单而肮脏的方式来获取要在default单元格文本区域中显示的信息,即将字符串合并为单个字符串

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: textCellIdentifier, for: indexPath)
    var cellText = ""
    let row = indexPath.row
    for x in data[row]{
        cellText = cellText + ", " + x
    }
    cell.textLabel?.text = cellText

    return cell
    }
在上面的例子中,我们在数据数组中找到了对应于行号的数组,然后我们循环通过该数组将所有字符串相加,得到一个大字符串,然后在表中显示该字符串

这是一个教程,它提供了一个很好的表视图概述,这可能会有所帮助。
在我看来,有几种方法可以做到这一点。您可以创建一个包含每个人的结构,并具有这些人的数组。像这样的事

struct Person {
   var name: String 
   var age: String
   var gender: String
   var id: String
}
然后将数据存储在数组中

var数据=[个人]

然后在表格单元格中,可以设置要显示的每个项目的标签

或者,您可以通过一种简单而肮脏的方式来获取要在default单元格文本区域中显示的信息,即将字符串合并为单个字符串

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: textCellIdentifier, for: indexPath)
    var cellText = ""
    let row = indexPath.row
    for x in data[row]{
        cellText = cellText + ", " + x
    }
    cell.textLabel?.text = cellText

    return cell
    }
在上面的例子中,我们在数据数组中找到了对应于行号的数组,然后我们循环通过该数组将所有字符串相加,得到一个大字符串,然后在表中显示该字符串

这是一个教程,它提供了一个很好的表视图概述,这可能会有所帮助。

为什么不为此创建一个模型类呢?..如果您有一个数组,其中每个元素直接对应于表中的一行,这将是一个好的开始。您必须实现UITableViewDataSource协议,该协议要求对行进行计数—您的数组计数是完美的,并且对数据[row]所具有的每一行使用单元格:为什么不为此创建一个模型类?..如果您有一个数组,其中每个元素直接对应于表中的一行,这将是一个良好的开端。您必须实现UITableViewDataSource协议,该协议需要一个行数—您的数组数是完美的—以及数据[row]具有的每一行的单元格: