Ios 类型()不符合协议anyobject

Ios 类型()不符合协议anyobject,ios,swift,swift2,Ios,Swift,Swift2,我正试图在离开视图控制器之前确认提交: 然而,我得到了这个错误: type () does not conform to protocol anyobject 以下是出现错误的行: self.navigationItem.backBarButtonItem?.target = self.validateBeforeBack("back", completion: { (bool) -> () in self.navigationController?.po

我正试图在离开视图控制器之前确认提交:

然而,我得到了这个错误:

type () does not conform to protocol anyobject
以下是出现错误的行:

        self.navigationItem.backBarButtonItem?.target = self.validateBeforeBack("back", completion: { (bool) -> () in
        self.navigationController?.popViewControllerAnimated(true)
    })
UDATE: 因此,解决方案是将target改为action,并将函数调用放在
Selector()

即:

    self.navigationItem.backBarButtonItem?.action = Selector(self.validateBeforeBack("back", completion: { (bool) -> () in
        self.navigationController?.popViewControllerAnimated(true)
    }))

不清楚
validateBeforeBack()
返回什么,因为您没有提供它。根据错误,我假设它返回
()
(即“void”或“nothing”)。您不能将结果指定给属性


我想你真正想做的是在按下按钮时调用这个函数。目标/动作按钮不是这样工作的。请参阅中的
目标操作
。您需要将
target
设置为要将消息发送到的对象,并将
action
设置为要发送的选择器。

不清楚
validateBeforeBack()
返回什么,因为您没有提供它。根据错误,我假设它返回
()
(即“void”或“nothing”)。您不能将结果指定给属性

我想你真正想做的是在按下按钮时调用这个函数。目标/动作按钮不是这样工作的。请参阅中的
目标操作
。您需要将
target
设置为要将消息发送到的对象,并将
action
设置为要发送的选择器

  • popViewControllerAnimated(:)
    的返回类型为
    UIViewController?
    ,但是函数的闭包参数
    validateBeforeBack(::completion:)
    的返回类型为
    Void
    返回类型(您的
    validateBeforeBack(::completion:)
    函数,或者您传递给它的闭包,都应该考虑到这一点进行调整)

  • 确保
    validateBeforeBack(uquo:completion:)
    函数实际具有返回类型(因为它是赋值中的值)

  • popViewControllerAnimated(:)
    的返回类型为
    UIViewController?
    ,但是函数的闭包参数
    validateBeforeBack(::completion:)
    的返回类型为
    Void
    返回类型(您的
    validateBeforeBack(::completion:)
    函数,或者您传递给它的闭包,都应该考虑到这一点进行调整)

  • 确保
    validateBeforeBack(uquo:completion:)
    函数实际具有返回类型(因为它是赋值中的值)


  • 将您的委托方法置于@optional@ChetanPrajapati我没有在本期中使用委托方法,您能解释一下您的委托方法的含义吗将您的委托方法置于@optional@ChetanPrajapati我没有在本期中使用委托方法,你能解释一下函数的含义吗?闭包应该返回被接受为目标还是动作?闭包既不是目标也不是动作。你读过Cocoa中目标行动模式的链接介绍吗?函数需要返回一个响应操作选择器的对象。通常,目标是视图控制器,操作是您要调用的方法。闭包应该返回什么以被接受为目标或操作?闭包既不是目标也不是操作。你读过Cocoa中目标行动模式的链接介绍吗?函数需要返回一个响应操作选择器的对象。通常,目标是视图控制器,操作是要调用的方法。