将数据插入 swift class 类型的数组

inserting data into array of type swift class

如何将文本字段文本的值插入 class 类型的数组?

基本上,我有两个视图控制器,一个显示项目列表和使用以下 class

创建的代码
class Courses {

    var courseName : String
    var courseCode : Int

    init(courseName : String, courseCode : Int){
        self.courseName = courseName
        self.courseCode = courseCode
    }
}

//从 class

创建数组
var courses : [Courses] = [Courses(courseName: "Unix Linux", courseCode: 101),
                               Courses(courseName: "ASP.Net", courseCode: 202),
                               Courses(courseName: "CISCO", courseCode: 203),
                               Courses(courseName: "Photoshop Editing", courseCode: 306)
                               ]

第二个视图控制器有两个文本字段,允许某人将新课程添加到现有数组。我如何实现这一点并使用来自不同视图控制器的新项目重新加载 table 视图

我在第二个视图 controller.swift 文件中添加了 var 课程:[课程] = []。不知道还能做什么。 我试过这样的东西

@IBAction func addCourseButton(_ sender: Any) {
        if courseName.text != "" {

            let courseCodeString = Int(courseCode.text!)
            let item = Courses(courseName: "\(courseName.text)", courseCode: courseCodeString!)

            courses.append(item)

            for i in courses {
                print(i.courseName)
            }
        }
    }

您的问题有两种可能的解决方案。

  1. 使用协议
  2. 使用通知观察者

在第一种情况下,

在第二个 ViewController.swift 中添加协议,就在 class 定义

之上
protocol UpdateCourseAfterAddProtocol:class {

    func classListUpdated(with course: Courses)


}





class SecondViewController:UIViewController  {

    weak var dele:UpdateCourseAfterAddProtocol? = nil



@IBAction func addCourseButton(_ sender: Any) {
        if courseName.text != "" {

            let courseCodeString = Int(courseCode.text!)
            let item = Courses(courseName: "\(courseName.text)", courseCode: courseCodeString!)

          dele?.classListUpdated(with: item)
        }
    }

}

将 Main.storyboard 中的 Segue 名称添加到 "firstToSecond" 或任何名称 在您的 table 视图存在的第一个视图控制器中(假设名称是 FirstViewController)

    class FirstViewController {


       // Bar button Action
       @IBAction func addCoursePressed(_ send:UIBarButton) {

        self.performsegue(with:"firstToSecond")
      }
     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "firstToSecond" {

        let toViewController = segue.destination as! SecondViewController

        toViewController.dele = self



    }
  }
}
extension FirstViewController: UpdateCourseAfterAddProtocol {

    func classListUpdated(with course: Courses) {

        self.courses.append(course)
        self.tableView.reloadData()
     }



}