【发布时间】:2020-04-02 21:13:11
【问题描述】:
我有三个视图控制器WebkitViewController,然后是另外两个视图控制器WebkitViewControllerA 和WebkitViewControllerB,它们都扩展了WebkitViewController。我在编写一个通用函数时遇到了麻烦,该函数将查看 segue 目的地的视图控制器并告诉我它是三种类型中的哪一种。有没有更好的方法来做到这一点?
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.destination is WebKitViewController && sender is UIButton {
let viewControllerType = {
if segue.destination is WebKitViewControllerA {
WebKitViewControllerA.self
} else if segue.destination is WebKitViewControllerB {
WebKitViewControllerB.self
} else {
WebKitViewController.self
}
}()
let button = sender as? UIButton
let vc = segue.destination as? viewControllerType
vc?.foo = "ho ho ho"
}
}
}
我还尝试了类似以下的方法:
var vc: WHAT_TYPE_TO_PUT_HERE?
if segue.destination is CustomViewController {
vc = segue.destination as? CustomViewController
} else if segue.destination is WebKitBelowFoldViewController {
vc = segue.destination as? WebKitBelowFoldViewController
} else {
vc = segue.destination as? WebKitViewController
}
但我不知道我可以给 vc 什么类型的类型检查器会满足。
【问题讨论】:
-
segues 的标识符不是唯一的,因此更容易检查标识符吗?
-
@vadian 如果您要依赖类型(通过
as?)来分配某些属性,那么您不妨依赖类型而不是还需要标识符。 -
三个VC类有关系吗?
WebKitViewControllerA和WebKitViewControllerB是WebKitViewController的子类吗?