Ios 使用self.disclose在视图控制器之间更改viewcontroller中的现有数据

Ios 使用self.disclose在视图控制器之间更改viewcontroller中的现有数据,ios,swift,segue,Ios,Swift,Segue,我有一个视图控制器。它以模式呈现全屏视图控制器的序列。它将图像数据列表传递给全屏视图控制器。此列表具有与之相关的属性,如like、views等。我已经查看了其他答案,但相信它们将完全替换当前数组,我认为这将完全重新加载第一个视图中兑现的每一位数据。所以我只想修改需要修改的数据 Class FirstController { var photosList: [customStruct] = [Photo1,Photo2,Photo3] override func prepare(

我有一个视图控制器。它以
模式呈现全屏视图控制器的序列。它将图像数据列表传递给全屏视图控制器。此列表具有与之相关的属性,如like、views等。我已经查看了其他答案,但相信它们将完全替换当前数组,我认为这将完全重新加载第一个视图中兑现的每一位数据。所以我只想修改需要修改的数据

Class FirstController {
    var photosList: [customStruct] = [Photo1,Photo2,Photo3] 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "photofull" {

        if let fullImaageViewController = segue.destination as? ImageDetailViewController {
            fullImageViewController.photosList = photosList
        }
    }
}
在这里,数据通过模态视图控制器向前传递。在完整的imageViewcontroller中,可以更改数据,例如<代码>[photosList[1]。imageLikes=photosList[1]。imageLikes+1

唯一的问题是我只能在fullImageViewController上更改此数据,而不能在FirstController上更改。是否有办法在前一个控制器上访问此数据


我想做一些类似于
FirstController()[photosList[1]。imageLikes=FirstController.photosList[1]。imageLikes+1
的事情,但它不起作用。

FullImageViewController
上创建一个协议。并将该协议(委托)分配给
FirstViewController

然后调用
fullimageviewcontroller
中的协议函数,并提供所需信息,以便在
FirstViewController
中进行所需更新


想想mail composer
delegate
的功能。

好吧,这里需要的是一个简单的委派协议,用于将数据从一个
视图控制器
传输到另一个
视图控制器

以下是如何使用协议的步骤

ViewController2
fullimageviewcontroller
中执行以下步骤

在类声明上方声明您的委托

protocol MyDelegate:class { // declare your protocol a class protocol
    func sendDataBack(value: Photo)
}
类中
声明您的
委托的
变量

weak var myDelegateObj: MyDelegate? // always declare a weak delegate so that it cannot capture the memory of the object
当您
解除VC
时,只需用line调用代理即可

myDelegateObj?.sendDataBack(value: Photo)

现在转到您的
FirstViewController
,如果未在
viewdidload
中或在显示视图时声明
FirstViewController Obj
,请转到您声明该对象的行。 然后执行以下操作

let vc = FirstViewController()
vc.myDelegateObj = self
并在
FirstViewController

在FirstViewController中:

class FirstViewController:UIViewController,MyDelegate

weak var myDelegateObj: MyDelegate? // always declare a weak delegate so that it cannot capture the memory of the object
并实现MyDelegate方法

然后在开始之前,我使用

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "photofull" {
        if let fullImaageViewController = segue.destination as? ViewController2 {
            fullImaageViewController.myDelegateObj = self
        }
    }
}

希望这能有所帮助。

如果答案对您有帮助,请务必接受,提前感谢:)与其这样做,不如这样做
fullimageviewcontroller.myDelegateObj=self as!MyDelegate
,只需通过这样做
class ViewController:UIViewController,MyDelegate
,使您的视图控制器符合
MyDelegate
,然后只需执行
fullimageviewcontroller.myDelegateObj=self
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "photofull" {
        if let fullImaageViewController = segue.destination as? ViewController2 {
            fullImaageViewController.myDelegateObj = self
        }
    }
}