如何使用委托/协议在 3 个视图之间传递传递到根视图

问题描述

我构建了一个拍照应用,用户可以查看这张照片。之后他可以看到这张照片 在 uicollection 视图中

-(1 个视图 - PicEditorViewController) 用户拍照并将数据传递给下一个视图使用

let previewVC = storyboard?.instantiateViewController(withIdentifier: "PreviewViewController") as! PreviewViewController
previewVC.delegate = self // using the delegate 

-(2 视图 - PreviewViewController) 用户查看图片并按下按钮将日期传递到下一个视图(根视图)使用

    self.delegate?.previewVC1(preview: true,img : img.image)
    self.navigationController?.popToRootViewController(animated: true)

在同一个视图中,我初始化了一个协议

protocol PreviewViewControllerDelegate  
{
    func previewVC1(preview : Bool,img : img.image)
    
}
  • (3 视图 SavePicsViewController) Root 视图

用户在uicollection视图中看到图片

extension SavePicsViewController : PreviewViewControllerDelegate
{
    func previewVC1(preview: Bool,img : img.image)
    {
         savedPic.appen(img) // the array fill the collection 
        self.collectionView.reloadData()
        self.collectionView.delegate = self
}
}

但是我无法在扩展中调用 previewVC1 函数的问题

&savedPic IS 0

我该如何解决这个问题

解决方法

SavePicsViewController 需要具有 weak var delegate: PreviewViewControllerDelegate 属性,并且需要在实例化它时设置它。