[英]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.