【问题标题】:type () does not conform to protocol anyobjecttype() 不符合协议 anyobject
【发布时间】:2015-08-04 14:01:12
【问题描述】:

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

但是我收到了这个错误:

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)
    }))

【问题讨论】:

  • 把你的委托方法@optional.
  • @ChetanPrajapati 我没有使用委托方法来解决这个问题,你能解释一下 func R U 的含义吗

标签: ios swift swift2


【解决方案1】:

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

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

【讨论】:

  • 闭包应该返回什么才能被接受为目标或动作?
  • 闭包既不是目标也不是动作。您是否阅读过 Cocoa 中目标动作模式的链接介绍?该函数需要返回一个响应操作选择器的对象。通常目标是视图控制器,动作是你要调用的方法。
【解决方案2】:
  1. popViewControllerAnimated(_:) 的返回类型为 UIViewController?,但是函数 validateBeforeBack(_:completion:) 的闭包参数具有 Void 返回类型(validateBeforeBack(_:completion:) 函数的实现,或者闭包你传递给它,应该考虑到这一点进行调整)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-23
    • 2015-01-02
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    相关资源
    最近更新 更多