gpt4 book ai didi

swift - 使用 Swift 在 switch/case 语句中设置 UIViewController

转载 作者:行者123 更新时间:2023-11-28 14:56:48 26 4
gpt4 key购买 nike

我正在尝试加载基于按钮按下的 View 。我想我可以在下面做这样的事情,我定义了一个通用的 UIViewController,然后将它设置为 switch/case 语句中的特定 UIViewController,但它显然不能这样工作。我做错了什么?

@objc func menuButton(sender: UIButton) {
var view: UIViewController!
switch sender.tag {
case 0:
view = MenuViewController()
view.menuType = .Account
case 1:
view = MenuViewController()
view.menuType = .Sync
case 2:
view = AuthViewController()
view.menuType = .Auth
default: break
}
self.navigationController?.pushViewController(view, animated: true)
}

最佳答案

如果我没记错的话,编译器应该会报错:

Value of type 'UIViewController' has no member 'menuType'

这里有几个选项可以解决这个问题:

解决方案一

使用转换

@objc func menuButton(sender: UIButton) {
var view: UIViewController!
switch sender.tag {
case 0:
view = MenuViewController()
(view as? MenuViewController())?.menuType = .Account
case 1:
view = MenuViewController()
(view as? MenuViewController())?.menuType = .Sync
case 2:
view = AuthViewController()
(view as? AuthViewController())?.menuType = .Auth
default: break
}
self.navigationController?.pushViewController(view, animated: true)
}

方案二

创建协议(protocol)MenuProtocol

protocol MenuProtocol {
var menuType: MenuType { get set }
}

并使 MenuViewControllerAuthViewController 实现该协议(protocol)。然后您可以执行以下操作:

@objc func menuButton(sender: UIButton) {
var view: (UIViewController & MenuProtocol)!
switch sender.tag {
case 0:
view = MenuViewController()
view.menuType = .Account
case 1:
view = MenuViewController()
view.menuType = .Sync
case 2:
view = AuthViewController()
view.menuType = .Auth
default: break
}
self.navigationController?.pushViewController(view, animated: true)
}

关于swift - 使用 Swift 在 switch/case 语句中设置 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49277496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com