首页 > 解决方案 > 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
}

标签: iosswiftdelegates

解决方案


在这种情况下,您不需要委托。您正在转发数据,所以只需这样做:

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.


推荐阅读