多维数组转换为表格

4

我有一堆数组:

let CNSNRT = ["CNS", "NRT", 3637, 2113] as [Any]
let ADKANC = ["ADK", "ANC", 1192, 2200] as [Any]
let LAXMCE = ["LAX", "MCE", 259 , 2370] as [Any]
let ANCMCG = ["ANC", "MCG", 219, 2440] as [Any]
let ATLGLH = ["ATL", "GLH", 378, 2590] as [Any]
let CNSHKG = ["CNS", "HKG", 3450, 2728] as [Any]
let AKPFAI = ["AKP", "FAI", 253, 2960] as [Any]
let ADLKUL = ["ADL", "KUL", 3524, 2984] as [Any]

合并它们:

let routesArray = [CNSNRT, ADKANC, LAXMCE, ANCMCG, ATLGLH, CNSHKG, AKPFAI, ADLKUL]

使用print(routesArray[0]),我得到了["CNS", "NRT", 3637, 2113],而使用print(routesArray[0][0]),我得到了CNS,所以一切似乎引用正确。
但是,我不知道如何将其正确地放入UITableView中。基本上,routesArray中的每个项目都应该是一个单元格,而数组中的项目将定义单元格中的标签。
当前代码:
import UIKit

class ViewController: UIViewController, UITableViewDataSource {

@IBOutlet weak var routesTableView: UITableView!


func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return routesArray.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = routesTableView.dequeueReusableCell(withIdentifier: "cellReuseIdentifier")!

    let text = "\(routesArray[indexPath.row])"

    cell.textLabel?.text = text

    return cell
}


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

routesTableView.dataSource = self


}

生成一个表格,其中每一行看起来像["CNS", "NRT", 3637, 2113],但我无法弄清楚如何将它们分解以将其应用于单元格上的特定标签。因此,例如,originLabel 应该显示 CNS ,但在下一个单元格中,originLabel 应该显示 ADK

请编辑您的问题,包括相关的表视图控制器代码。展示您已经完成了什么。清楚地指出您需要帮助的内容。 - rmaddy
1个回答

2

当你访问一个特定的数组并使用以下方式将其转换为单个字符串时:

let text = "\(routesArray[indexPath.row])"

由于您只需要单元格的originLabel中的第一个错误元素,因此需要获取该元素。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = routesTableView.dequeueReusableCell(withIdentifier: "cellReuseIdentifier")!

    let rowData = routesArray[indexPath.row]
    if let firstStr = rowData.first as? String {
        cell.originLabel = firstStr
    }

    return cell
}

请注意 - 不应该强制解包调用 dequeueReusableCell。它有可能返回 nil,导致你的应用程序崩溃。


很好。我得做一些微调,但第一个标签已经可以运行了。不过我还是有些困惑,不知道在 rowData.first 中改变什么才能获取数组中的第二个和第三个元素。 - FasterThanLlamas
rowData[1] 给出第二个值,rowData[2] 给出第三个值,以此类推。 - rmaddy
太好了。这是新代码。但出于某种原因,最后一个仍然没有更新标签。没有任何错误。如果rowData.first是字符串,则: routeCell.originLabel.text =“起点:(originString)”如果rowData [1]是字符串,则: routeCell.destinationLabel.text =“目的地:(destinationString)”如果rowData [2]是字符串,则: routeCell.priceLabel.text =“价格:$(priceString)” - FasterThanLlamas
rowData[2] 不是 String 类型,而是 Int 类型。 - rmaddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接