在 swift 中将一个数组中的元素链接到另一个数组中的元素

Linking elements in one array to elements in another array in swift

我有一个 UITableViewController。每行都从一个全局数组中填充。 这个全局数组描述了任务的标题。每个任务应该有 3 个关联变量,它们是字符串。

我希望能够单击 table 视图控制器中的任务标题,并将相关变量链接到该标题。 全局数组将随着最终用户在全局数组中添加或删除标题而增长和缩小。

我不确定最好的方法,有什么建议吗?

注意:全局数组是从另一个单独的 viewController.swift 文件填充的。我也希望在另一个 viewController.swift 中分配变量,因此我将这些变量设为全局变量。但是我不确定如何根据 table 视图中选择的标题分配不同的变量值。

import UIKit

var Programs: [String] = []

var Variable1: [String] = []
var Variable2: [String] = []
var Variable3: [String] = []

class ProgramList: UIViewController, UITableViewDataSource, UITableViewDelegate{

@IBOutlet weak var programTableView: UITableView!

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


override func viewDidAppear(_ animated: Bool) {
    programTableView.reloadData()
    save()
}

//saving current state of programs array
func save(){
    UserDefaults.standard.set(Programs, forKey: "notes")
}

//loading saved program array
func load() {
    if let loadedData: [String] = UserDefaults.standard.value(forKey: "notes") as? [String] {
        Programs = loadedData
        programTableView.reloadData()
    }
}

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
    cell.programTitle.text = Programs[indexPath.row]
    return cell
}

//Removing Item by swipping left & saving this newly established array
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {

    if editingStyle == UITableViewCell.EditingStyle.delete {
        Programs.remove(at: indexPath.row)
        programTableView.reloadData()
        save()
    }

 }
}

你需要

struct Item {
  let title:String
  let others:[String]
}

struct Item {
  let title,v1,v2,v3:String 
}

而不是单独的数组,然后

var programs = [Item]()