Табличное представление: Имя выбрано, лучший способ сохранить идентификатор (не имя) в переменной? - PullRequest
0 голосов
/ 21 февраля 2019

Я новичок в Swift и программировании в целом.У меня есть табличное представление с динамической ячейкой, где каждая ячейка отображает имя из моего массива ["John","Steve","Matt"]

Я могу видеть, какая строка выбрана, выполнив Print(IndexPath.item) в didSelectRowAt

У каждого из этих имен есть идентификационный номер (1,2,3), который я еще не реализовал, но я хочу сохранить идентификационный номер выбранной строки в переменной (var idSelected)

Каков наилучший способ сделать это?

Думаю, я мог бы сделать одно большое «если утверждение», но у меня будут сотни имен, так что это неэффективно.Я думал о том, чтобы каким-то образом использовать Struct для хранения идентификатора соответствующего выбранного имени, но мне нужно руководство

Спасибо

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Более масштабируемое решение - начать проектирование объектно-ориентированным способом, чтобы в будущем, если у вас было больше информации о человеке, который требуется хранить, вы можете добавить это в структуру.

    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 вы можете получить объект отдельного человека и выбрать из него необходимое имя и идентификатор.

    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`
        }
0 голосов
/ 21 февраля 2019

Вы можете выполнить следующие шаги:

//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)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...