type()不符合协议anyobject

时间:2015-08-04 14:01:13

标签: ios swift swift2

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

但是我收到了这个错误:

type () does not conform to protocol anyobject

这是出现错误的行:

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

UDATE : 所以解决方案是将目标更改为 action 并将函数调用放在Selector()

即:

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

2 个答案:

答案 0 :(得分:3)

目前还不清楚validateBeforeBack()返回什么,因为你没有提供它。从错误中,我假设它返回()(即" void"或"没有")。您无法将结果分配给属性。

我认为你真正想做的是按下按钮时调用此功能。这不是目标/操作按钮的工作方式。请参阅Concepts in Objective-C Programming中的Target-Action。您需要将target设置为您希望邮件发送到的对象,并action设置为您要发送的选择器。

答案 1 :(得分:2)

  1. popViewControllerAnimated(_:)的返回类型为UIViewController?,但函数validateBeforeBack(_:completion:)的闭包参数具有Void返回类型(validateBeforeBack(_:completion:)的实现1}}函数,或者你传递给它的闭包,应该调整以考虑到这一点)

  2. 确保您的validateBeforeBack(_:completion:)函数实际上有一个返回类型(因为它是赋值中的值)