簡體   English   中英

如何快速檢查符合協議的實例的類?

[英]How do I check the class of an instance that conforms to a protocol in swift?

我正在嘗試檢查符合協議的實例的類。

我有一個協議。

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) ,該toolbar以前可以在我的工具欄是由外部庫提供的另一種類時使用(我想從我的代碼庫中刪除該類,因為我想要其他功能)。

我試圖使我的協議擴展AnyObject ,但是我認為這是隱式的,並且沒有任何效果。

如何檢查符合給定協議的實例數組,以檢查特定的類類型?

我認為您需要嘗試投射它,例如

if let vc = toolbar as? GameToolbar {}

在您的情況下,您可能需要以下內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM