Swift:使用委托将数据发送到另一个视图控制器

问题描述

如何使用委托将数据发送到另一个视图控制器,然后将其显示在集合视图中?我的问题是使用委托在数组之间移动。

下面是我正在研究的示例。

当我在ThirdViewController中使用usersList时,出现一条错误消息:“在隐式展开一个可选值时意外地找到nil”


protocol ExampleDelegate {
    func delegateFunction(usersArray: Array<User>)   
}


class ViewController: UIViewController {

  private var model: Users = ViewController.createAccount()
  var exampleDelegate: ExampleDelegate?


  @IBAction func ShowUsers(_ sender: UIButton) {
        let ShowUsersVC = storyboard?.instantiateViewController(identifier: "ThirdViewController") as! ThirdViewController

        var userList: Array<User> = model.listofUsers
        exampleDelegate?.delegateFunction(usersArray: userList )

        present(ShowUsersVC,animated: true)
        
    }

}


class ThirdViewController: UIViewController {

    @IBOutlet weak var collectionView: UICollectionView!

    var usersList: Array<User>!


    override func viewDidLoad() {
           super.viewDidLoad()

    let GetUsersVC = storyboard?.instantiateViewController(identifier: "ViewController") as! ViewController
        GetUsersVC.showMomentsDelegate = self

        collectionView.dataSource = self
        collectionView.delegate = self

    }
}


extension ThirdViewController: ExampleDelegate {
    func delegateFunction(usersArray: Array<User>)  
    usersList = usersArray
}

解决方法

在这种情况下,您不需要代表。您正在转发数据,因此只需执行以下操作:

class ViewController: UIViewController {

  private var model: Users = ViewController.createAccount()
  var exampleDelegate: ExampleDelegate?


  @IBAction func showUsers(_ sender: UIButton) {
        let showUsersVC = storyboard?.instantiateViewController(identifier: "ThirdViewController") as! ThirdViewController

        var userList: Array<User> = model.listOfUsers
        showUsersVC.usersList = userList /// pass the data!

        present(showUsersVC,animated: true)
        
    }
}

在Swift中,您还应该小写userList之类的对象,以及showUsers之类的函数。