Tableview:选择名称,将ID(而非名称)存储在变量中的最佳方法?

时间:2019-02-21 19:02:46

标签: swift uitableview

我一般都不熟悉Swift和编程。我有一个带有动态单元格的表格视图,其中每个单元格都显示来自数组CASE WHEN AribaSupplier_PotentialforCatalogFlag = 1 THEN 'True' ELSE 'False' END

的名称

通过执行["John","Steve","Matt"]中的Print(IndexPath.item),可以看到选择了哪一行

这些名称的每个都有一个我尚未实现的ID号(1,2,3),但我想将所选行的ID号存储在变量(didSelectRowAt)中

什么是最好的方法?

我想我可以做一个大的“ if语句”,但是我将有数百个名称,因此效率不高。我正在考虑使用Struct来存储所选的相应名称的ID,但需要一些指导

谢谢

2 个答案:

答案 0 :(得分:0)

您可以按照以下步骤操作:

//1. Create a structure to hold the data
struct Person{
    let name : String
    let id : String

    init(name: String, id: String){
        self.name = name
        self.id = id
    }
}

class ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!

    //2. Create a datasource array
    let datasource : [Person] = [Person(name: "Name1", id: "111"),
                                 Person(name: "Name2", id: "222"),
                                 Person(name: "Name3", id: "333"),
                                 Person(name: "Name4", id: "444"),
                                   ]

    var personIDArray: [String] = []

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

extension ViewController : UITableViewDelegate{
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){

        //3. Extract the Person's id from Array
        let person = datasource[indexPath.row]

        //4. Add id to the array
        personIDArray.append(person.id)
    }
}

答案 1 :(得分:0)

一个更具可扩展性的解决方案是开始以面向对象的方式进行设计,以便将来如果您需要存储更多有关人员的详细信息,可以将其添加到结构中。

    struct Person {
        let name: String
        let ID: Int
    }

然后将persons数组定义为一个属性。

    var persons = [Person]()

每当获取值时,例如从ViewDidLoad()中填充值。

    // populate persons
    // assuming the personsData = [(id: name), (id: name), ....]
    for (key, value) in personsData {
        persons.append(Person(name: value, id: key))
    }

cellForRowAt内,您可以获取个人对象并从中获取所需的名称和ID。

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let person = persons[indexPath.row]
        cell.textLabel.text = person.name
    }

同样,您可以从person.id拿走didSelectRowAt

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
            let person = persons[indexPath.row]
            // doSomething with `person.id`
        }