我有一個函數,參數vcType:UIViewController.Type,我試圖讓檢查動態類型檢查混亂斯威夫特
if getTopmostViewController() is vcType {
// do stuff
}
但我是一個錯誤「vcType不是一個類型」 。我不確定問題是什麼,或者是否有更好的方法來做到這一點。
我有一個函數,參數vcType:UIViewController.Type,我試圖讓檢查動態類型檢查混亂斯威夫特
if getTopmostViewController() is vcType {
// do stuff
}
但我是一個錯誤「vcType不是一個類型」 。我不確定問題是什麼,或者是否有更好的方法來做到這一點。
也許你想是這樣的:
if getTopmostViewController().isKindOfClass(vcType.dynamicType) {
// do stuff
}
以上,vcType
是一些類的實例,它的檢查getTopmostViewController()
是否返回同一個類(或子類)的一個實例。
或者,也許你真的想寫這樣的功能:
func doStuffIfTopMostViewControllerHasType<VCType: UIViewController>(_: VCType.Type) {
if getTopmostViewController() is VCType {
// do stuff
}
}
你然後調用這樣的:
doStuffIfTopMostViewControllerHasType(MyViewController.self)
請注意,我傳遞MyViewController
類本身,不MyViewController
的實例。
AFAIU,在OP的情況下,它只會檢查'如果getTopmostViewController()。isKindOfClass(vcType){...}'因爲vcType已經是元類型。 – courteouselk
除我之外,還有人認爲奇怪的是獲得'isKindOfClass'功能的唯一方法是通過Foundation嗎? Swift在本地生成這樣的想法並不合理。 – matt
嘗試更換:
getTopmostViewController() is vcType
有了:
getTopmostViewController().dynamicType == vcType
編輯: 這隻會工作檢查的確切類型。如果由getTopmostViewController()
返回的控制器是vcType的後代,則將返回false
。
是的,如果僅僅需要檢查最頂層的VC是不是''vcType'',那麼它就可以工作。然而,如果有必要檢查最頂層的VC是否是'vcType'或其後代之一,那麼這是行不通的。 – courteouselk
確定無誤,編輯回覆。 – Eppilo
這聽起來像你的'vcType'參數不是一個真正的類型。這是一個對象。你想檢查最頂層的視圖控制器是否與'vcType'對象具有相同的類?或者你真的想讓你的函數採用一個類型參數? –