Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解决swift中冲突的结构值类型_Swift_String_Uitableview_Struct_Nsuserdefaults - Fatal编程技术网

解决swift中冲突的结构值类型

解决swift中冲突的结构值类型,swift,string,uitableview,struct,nsuserdefaults,Swift,String,Uitableview,Struct,Nsuserdefaults,我有一个UITableViewController。每一行都是从全局数组填充的。 此全局数组描述任务的标题。每个任务都有一些关联的变量,这些变量是字符串 我希望能够在表视图控制器中单击任务的标题,并将相关变量链接到该标题。 当最终用户从全局数组中附加或删除标题时,全局数组将增长和收缩 这是由一个struct生成的。结构包含特定的变量 在本例中,问题出现在加载函数中。 我无法加载数据,因为Programs=loadedData无法将类型“[String]”的值分配给类型“[Item] import

我有一个UITableViewController。每一行都是从全局数组填充的。 此全局数组描述任务的标题。每个任务都有一些关联的变量,这些变量是字符串

我希望能够在表视图控制器中单击任务的标题,并将相关变量链接到该标题。 当最终用户从全局数组中附加或删除标题时,全局数组将增长和收缩

这是由一个struct生成的。结构包含特定的变量

在本例中,问题出现在加载函数中。 我无法加载数据,因为
Programs=loadedData
无法将类型“[String]”的值分配给类型“[Item]

import UIKit



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

  var Programs = [Item]()

  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].title
    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()
    }

}

}
你需要

programs = loadedData.map { Item(title:$0,others:[])}
顺便说一句,你可以让它像

struct Item:Codable {

并使用编码器/解码器保存/加载它

如果我希望将元素附加到我的“其他”数组中,是否需要映射?类似于“Programs.append(textbox.text!)”的东西。因为这与类型“String”到预期参数类型“Item”的情况相同。