我正在尝试检查符合协议的实例的类。
我有个协议。
protocol ToolbarProtocol {
func show()
func hide()
}我有一个符合这个协议的类。
class GameToolbar: ToolbarProtocol {
...
}我创建了一个管理器类来管理我的工具栏。
class ToolbarManager {
var existingToolbars: [Game.rotation: Array<ToolbarProtocol>]
}在这个管理器中,我有一个想要查找特定类型工具栏的第一个实例的函数。
func getDebugToolbar() -> ToolbarProtocol? {
return existingToolbars[.east]?.first(where: { (toolbar: ToolbarProtocol) -> Bool in
toolbar.isKind(of: GameToolbar.self) //This line causes an error because .isKind is not a member of ToolbarProtocol
})
}我不能在toolbar上调用isKind(of),以前当我的工具栏是由外部库提供的不同类型的类时(我正试图从我的代码库中删除它,因为我想要不同的功能)。
我试着让我的协议扩展AnyObject,但我认为这是隐含的,而且没有任何效果。
如何检查符合给定协议的实例数组,以检查特定的类类型?
发布于 2018-07-04 16:37:26
我想你需要试着把它转换成
if let vc = toolbar as? GameToolbar {}在您的例子中,您可能需要这样的代码:
func getDebugToolbar() -> ToolbarProtocol? {
return existingToolbars[.east]?.first(where: { (toolbar: ToolbarProtocol) -> Bool in
let _ = toolbar as? GameToolbar
})
}https://stackoverflow.com/questions/51169114
复制相似问题