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

Swift: using delegates to send data to another view controller

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

下面是我正在处理的示例。

当我在 ThirdViewController 中使用 usersList 时,我收到一个错误 'Unexpectedly found nil while implicitly unwrapping an Optional value'


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.

等函数