我一般都不熟悉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,但需要一些指导
谢谢
答案 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`
}