type() 不符合协议 anyobject
Posted
技术标签:
【中文标题】type() 不符合协议 anyobject【英文标题】:type () does not conform to protocol 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 的含义吗 【参考方案1】:不清楚validateBeforeBack()
返回什么,因为您没有提供它。从错误中,我假设它返回()
(即“void”或“nothing”)。您不能将结果分配给属性。
我假设您真正想做的是在按下按钮时调用此函数。这不是目标/操作按钮的工作方式。请参阅Concepts in Objective-C Programming 中的Target-Action
。您需要将target
设置为您希望将消息发送到的对象,并将action
设置为您要发送的选择器。
【讨论】:
闭包应该返回什么才能被接受为目标或动作? 闭包既不是目标也不是动作。您是否阅读过 Cocoa 中目标动作模式的链接介绍?该函数需要返回一个响应操作选择器的对象。通常目标是视图控制器,动作是你要调用的方法。【参考方案2】:popViewControllerAnimated(_:)
的返回类型为 UIViewController?
,但是函数 validateBeforeBack(_:completion:)
的闭包参数具有 Void
返回类型(validateBeforeBack(_:completion:)
函数的实现,或者闭包你传递给它,应该考虑到这一点进行调整)
确保您的 validateBeforeBack(_:completion:)
函数实际上具有返回类型(因为它是赋值中的值)
【讨论】:
以上是关于type() 不符合协议 anyobject的主要内容,如果未能解决你的问题,请参考以下文章
类型 '[String, AnyObject?]' 不符合协议 AnyObject?:为啥?
类型“NSFastEnumerationIterator.Element”(又名“Any”)不符合协议“AnyObject”
类型“ContentView”不符合协议“View”(Xcode - Swift UI)