首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在swift中检查符合协议的实例的类?

如何在swift中检查符合协议的实例的类?
EN

Stack Overflow用户
提问于 2018-07-04 16:27:24
回答 1查看 42关注 0票数 0

我正在尝试检查符合协议的实例的类。

我有个协议。

代码语言:javascript
复制
protocol ToolbarProtocol {

  func show()

  func hide()

}

我有一个符合这个协议的类。

代码语言:javascript
复制
class GameToolbar: ToolbarProtocol {
...
}

我创建了一个管理器类来管理我的工具栏。

代码语言:javascript
复制
class ToolbarManager {
  var existingToolbars: [Game.rotation: Array<ToolbarProtocol>]
}

在这个管理器中,我有一个想要查找特定类型工具栏的第一个实例的函数。

代码语言:javascript
复制
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,但我认为这是隐含的,而且没有任何效果。

如何检查符合给定协议的实例数组,以检查特定的类类型?

EN

回答 1

Stack Overflow用户

发布于 2018-07-04 16:37:26

我想你需要试着把它转换成

代码语言:javascript
复制
if let vc = toolbar as? GameToolbar {}

在您的例子中,您可能需要这样的代码:

代码语言:javascript
复制
func getDebugToolbar() -> ToolbarProtocol? {
    return existingToolbars[.east]?.first(where: { (toolbar: ToolbarProtocol) -> Bool in
      let _ = toolbar as? GameToolbar
    })
  }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51169114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档