Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查符合swift协议的实例的类?_Swift_Swift4_Swift Protocols - Fatal编程技术网

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

如何检查符合swift协议的实例的类?,swift,swift4,swift-protocols,Swift,Swift4,Swift Protocols,我试图检查符合协议的实例的类 protocol ToolbarProtocol { func show() func hide() } class GameToolbar: ToolbarProtocol { ... } 我有一个协议 protocol ToolbarProtocol { func show() func hide() } class GameToolbar: ToolbarProtocol { ... } 我有一个符合这个协议的类 proto

我试图检查符合协议的实例的类

protocol ToolbarProtocol {

  func show()

  func hide()

}
class GameToolbar: ToolbarProtocol {
...
}
我有一个协议

protocol ToolbarProtocol {

  func show()

  func hide()

}
class GameToolbar: ToolbarProtocol {
...
}
我有一个符合这个协议的类

protocol ToolbarProtocol {

  func show()

  func hide()

}
class GameToolbar: ToolbarProtocol {
...
}
我创建了一个管理器类来管理我的工具栏

class ToolbarManager {
  var existingToolbars: [Game.rotation: Array<ToolbarProtocol>]
}
我无法调用
工具栏上的
isKind(of)
,以前,当我的工具栏是外部库提供的不同类型的类时(我正试图从代码库中删除它,因为我需要不同的功能),它可以工作

我试着让我的协议扩展任何对象,但我认为这是隐式的,没有效果


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

我认为您需要尝试强制转换它,如

if let vc = toolbar as? GameToolbar {}
在您的情况下,您可能需要以下内容:

func getDebugToolbar() -> ToolbarProtocol? {
    return existingToolbars[.east]?.first(where: { (toolbar: ToolbarProtocol) -> Bool in
      let _ = toolbar as? GameToolbar
    })
  }

我想你需要试着去投,比如

if let vc = toolbar as? GameToolbar {}
在您的情况下,您可能需要以下内容:

func getDebugToolbar() -> ToolbarProtocol? {
    return existingToolbars[.east]?.first(where: { (toolbar: ToolbarProtocol) -> Bool in
      let _ = toolbar as? GameToolbar
    })
  }

回答得好。仅这样做也应该足够了:返回现有工具栏[.east]?。首先作为?谢谢你,首先是谁?GameToolbar只会检查列表中的第一个,不是吗?首先,{condition}将为您提供第一个匹配条件的元素,因此将检查每个元素,直到找到匹配项或失败。是的,您是对的。我假设first where具有另一个功能。在尝试构建该解决方案时,建议的修复方法是简单地执行
工具栏是游戏工具栏
。记录在检查类型下。回答不错。仅这样做也应该足够了:返回现有工具栏[.east]?。首先作为?谢谢你,首先是谁?GameToolbar只会检查列表中的第一个,不是吗?首先,{condition}将为您提供第一个匹配条件的元素,因此将检查每个元素,直到找到匹配项或失败。是的,您是对的。我假设first where具有另一个功能。在尝试构建该解决方案时,建议的修复方法是简单地执行
toolbar is GameToolbar
,而不是。记录在检查类型下。