在SWIFT中使用协议和委托

在SWIFT中使用协议和委托,swift,delegates,uicollectionview,protocols,Swift,Delegates,Uicollectionview,Protocols,我试图将信息从集合视图单元格传递到另一个视图控制器,然后关闭视图控制器。我正试图与代表团一起这样做,因为我认为这是唯一的方法,到目前为止,我已经制定了如下协议: @objc protocol CollectionViewImageDelegate { optional func selectedCell(row: NSIndexPath, data: UIImage) } 我添加了以下属性: var delegate : CollectionViewImageDelegate? 然后

我试图将信息从集合视图单元格传递到另一个视图控制器,然后关闭视图控制器。我正试图与代表团一起这样做,因为我认为这是唯一的方法,到目前为止,我已经制定了如下协议:

@objc protocol CollectionViewImageDelegate {
   optional func selectedCell(row: NSIndexPath, data: UIImage) 
}
我添加了以下属性:

var delegate : CollectionViewImageDelegate?
然后在
didSelectItemAtIndexPath

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 

        let imageData = self.sources[indexPath.row] 
        self.delegate?.selectedCell?(indexPath, data: imageData) 

        self.dismissViewControllerAnimated(true, completion: nil)
}
那么,到目前为止,我如何将其称为“其他视图控制器”:

class ProfileViewController: UIViewController, CollectionViewImageDelegate {

var colViewImage : CollectionViewVC
在视图中,确实加载了:

colViewImage.delegate = self 
但这一切都没有发生:

func selectedCell(row: NSIndexPath, data: UIImage) {
    println(data) //Nothing prints
}
什么都没印我不知道为什么? 我对协议和代理等不熟悉,似乎不明白为什么它没有通过图像


谢谢

您的CollectionViewController正在调用此selectedCell方法,但您尚未链接代理

使您的其他ViewController符合collectionViewImageDelegate(通常应使用大写字母C拼写),并在其中实现您的方法selectedCell

将ViewController设置为CollectionViewController的代理


另外,更改
self.delegate?.selectedCell!(indexPath,数据:imageData)
进入
self.delegate?.selectedCell?(indexPath,数据:imageData)
仅当可选方法selectedCell由委托实现时调用该方法。

您定义的
image
是实际类(不是实例)吗?也许你想在你的协议中使用
UIImage
而不是
image
?是的,谢谢,就是这样,新的我很接近了。虽然我现在如何将选定的日期传递给我的另一个视图控制器,但我已稍微更改了我的问题并添加了内容。这是否可能不起作用,因为我将解雇视图控制器而不是segue?谢谢,尽管这正是我正在努力做的事情,因为我不知道如何做。我已经设置了对其他VC的引用,如:var VC2=ViewController2()。然后呢?我已尝试在viewDidLoad中执行VC2.delegate=self,但该选项没有出现?我想不出你需要提供更多的信息。如果你根据类的用途更具描述性地命名类,这也会有所帮助。ViewController2并没有真正告诉您它的功能。像ImagePickerCollectionViewController这样的东西会更好。我已经更改了代码,使其完全符合要求。ViewController 2我正在引用collectionView控制器我正在尝试将信息从中传递到ViewController 1我的所有代码现在都应该是正确的,尽管函数中的println仍然不是print我不知道为什么?