我在辅助类中有这个函数。这是为了显示/隐藏一些东西。
func showHideDetails(controller: UIViewController, isHidden: Bool) {
...
if controller is AddNewViewController {
let addNewViewController = controller as! AddNewViewController
addNewViewController.bgButton.isHidden = isHidden
} else if controller is EditViewController {
let editViewController = controller as! EditViewController
editViewController.bgButton.isHidden = isHidden
}
...
}
有没有办法让每个 Controller 都有一个 if 语句,而不是一个 if 语句?类似的东西,
if controller.hasProperty(bgButton) {
controller.bgButton.isHidden = isHidden
}
谢谢
最佳答案
你还需要使用 as 进行转换吗? ...
,但是为了不对所有具有 bgButton
的 View Controller 执行此操作,您可以定义一个基本协议(protocol),强制所有符合它的类都具有 bgButton
:
public protocol Buttoned {
var bgButton: UIButton { get set }
func setHideButton(_ isHidden: Bool)
}
extension Buttoned {
public func setHideButton(_ isHidden: Bool) {
bgButton.isHidden = isHidden
}
}
public class AddNewViewController: Buttoned {
@IBOutlet fileprivate weak var bgButton: UIButton!
....
}
public class EditViewController: Buttoned {
@IBOutlet fileprivate weak var bgButton: UIButton!
....
}
然后你可以像下面这样在实际的 View Controller 中处理这个 Action :
func showHideDetails(controller: UIViewController, isHidden: Bool) {
...
if let controller = controller as? Buttoned {
controller.setHideButton(isHidden)
}
...
}
关于swift - 无需强制转换即可访问 UIViewController 类属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48791519/