在 TableViewController 中呈现嵌套数组
Posted
技术标签:
【中文标题】在 TableViewController 中呈现嵌套数组【英文标题】:Presenting a nested array in a TableViewController 【发布时间】:2020-05-24 14:01:51 【问题描述】:很抱歉,这只是 Swift 中 Tables 的一个基本概念,但我对 Swift 很陌生,并且花了很长时间试图弄清楚这一点,但没有运气。
我有一个名为“数据”的数组,其结构如下:
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"],
...
]
有没有办法使用我拥有的数据结构并将其呈现在表格视图的行中?或者我会更好地重组我的数据吗?谢谢。
【问题讨论】:
你为什么不为此创建一个模型类..?? 如果您有一个数组,其中每个元素直接对应于表中的一行(您这样做),那将是一个好的开始。您必须实现 UITableViewDataSource 协议,该协议需要行数(您的数组数是完美的)和每行的单元格(Data[row] 具有):***.com/questions/33234180/… 【参考方案1】:在我看来,有几种方法可以做到这一点。您可以创建一个包含每个人的结构并拥有一个数组。像这样的东西。
struct Person
var name: String
var age: String
var gender: String
var id: String
然后将你的数据存储在一个数组中
var data = [Person]
然后,您可以在表格单元格中设置要显示的每个项目的标签。
或者你可以得到你想在默认单元格文本区域中显示的信息的一种肮脏的方式是将字符串连接在一起作为单个字符串。
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
在上面我们在data数组中找到对应行号的数组,然后我们循环遍历该数组,将所有字符串加在一起得到1个大字符串,然后将该字符串显示在表格中。
这是一个教程,它很好地概述了可能会有所帮助的表视图。 https://www.codingexplorer.com/getting-started-uitableview-swift/
【讨论】:
【参考方案2】:嵌套多个数组作为表视图数据源是最糟糕的选择。永远不要使用这些。
通常和推荐的选择是自定义结构。
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)]
...
【讨论】:
以上是关于在 TableViewController 中呈现嵌套数组的主要内容,如果未能解决你的问题,请参考以下文章
从 TableViewController 中关闭 ViewController
animateTransition 不再适用于 iOS 13 中模态呈现的 viewController