为应用中所有 UIViewController 的标题实现一个 DidSet
Implement a DidSet for all UIViewController's title in app
我正在尝试根据我为它们设置的标题自动设置每个 ViewController 应用程序的参数。
是否可以在 UIViewController 的标题 属性 上构建通用 DidSet?
可能是,但这不是必需的,您可以将这两个功能包装在一个函数或您自己的变量中:
extension ViewController {
func setTitle(_ title: String) {
self.title = title
// Do whatever you need to do else
}
}
您不能将 属性 观察者添加到扩展中现有类型的属性。要添加 属性 观察者,您需要修改实际类型的源代码,这在 UIViewController
.
的情况下当然是不可能的
但是,还有一些其他选择。
您可以创建一个 UIViewController
subclass,在其中覆盖 title
属性 并在此覆盖上添加 didSet
属性.你只需要确保你所有的视图控制器将 subclass 你的基础 class,而不是 UIViewController
.
class BaseViewController: UIViewController {
override var title: String? {
didSet {
print("title was set to \(title ?? "nil")")
}
}
}
BaseViewController().title = "title"
您还可以使用新方法扩展 UIViewController
,您可以在其中设置 title
属性 并在此处添加您要添加到 [=15= 的任何其他功能].使用此解决方案,您可以继续调用 classing UIViewController
,您将不需要 BaseViewController
,但您需要确保调用 setTitle
而不是直接调用为 title
属性.
赋值
extension UIViewController {
func setTitle(_ title: String?) {
self.title = title
print("title was set to \(title ?? "nil")")
}
}
UIViewController().setTitle("other")
我正在尝试根据我为它们设置的标题自动设置每个 ViewController 应用程序的参数。
是否可以在 UIViewController 的标题 属性 上构建通用 DidSet?
可能是,但这不是必需的,您可以将这两个功能包装在一个函数或您自己的变量中:
extension ViewController {
func setTitle(_ title: String) {
self.title = title
// Do whatever you need to do else
}
}
您不能将 属性 观察者添加到扩展中现有类型的属性。要添加 属性 观察者,您需要修改实际类型的源代码,这在 UIViewController
.
但是,还有一些其他选择。
您可以创建一个 UIViewController
subclass,在其中覆盖 title
属性 并在此覆盖上添加 didSet
属性.你只需要确保你所有的视图控制器将 subclass 你的基础 class,而不是 UIViewController
.
class BaseViewController: UIViewController {
override var title: String? {
didSet {
print("title was set to \(title ?? "nil")")
}
}
}
BaseViewController().title = "title"
您还可以使用新方法扩展 UIViewController
,您可以在其中设置 title
属性 并在此处添加您要添加到 [=15= 的任何其他功能].使用此解决方案,您可以继续调用 classing UIViewController
,您将不需要 BaseViewController
,但您需要确保调用 setTitle
而不是直接调用为 title
属性.
extension UIViewController {
func setTitle(_ title: String?) {
self.title = title
print("title was set to \(title ?? "nil")")
}
}
UIViewController().setTitle("other")