提问人:Cublax 提问时间:10/22/2020 更新时间:10/22/2020 访问量:379
在应用中为所有 UIViewController 的标题实现 DidSet
Implement a DidSet for all UIViewController's title in app
问:
我正在尝试根据我为它们设置的标题自动设置应用程序的每个 ViewController 的参数。
是否可以在 UIViewController 的 title 属性上构建通用 DidSet?
答:
1赞
Adis
10/22/2020
#1
可能是,但不是必需的,您可以将这两个功能包装在函数或您自己的变量中:
extension ViewController {
func setTitle(_ title: String) {
self.title = title
// Do whatever you need to do else
}
}
1赞
Dávid Pásztor
10/22/2020
#2
不能将属性观察器添加到扩展中现有类型的属性。要添加属性观察器,您需要修改实际类型的源代码,这当然是不可能的。UIViewController
但是,还有其他几种选择。
您可以创建一个子类,在其中重写该属性并添加此重写属性。你只需要确保你所有的视图控制器都会对你的基类进行子类化,而不是。UIViewController
title
didSet
UIViewController
class BaseViewController: UIViewController {
override var title: String? {
didSet {
print("title was set to \(title ?? "nil")")
}
}
}
BaseViewController().title = "title"
还可以使用新方法进行扩展,在该方法中设置属性并在此处添加要添加到 .使用此解决方案,您可以继续子类化,您不需要 ,但您需要确保调用而不是直接为属性赋值。UIViewController
title
didSet
UIViewController
BaseViewController
setTitle
title
extension UIViewController {
func setTitle(_ title: String?) {
self.title = title
print("title was set to \(title ?? "nil")")
}
}
UIViewController().setTitle("other")
评论