如何避免在 Swift 的 UIViewController 中重复编写相同的代码?
How to avoid writing same code over again in UIViewController in Swift?
我在每个 UIViewController 中编写了以下代码:
var navBar = self.navigationController?.navigationBar
navBar?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
我不想在我创建的每个 UIViewController
中都写这些。我很懒惰,我不想重复自己。我无法在 extension
中添加它。那么我该怎么做才能在创建UIViewController
时不必编写这段代码?
在这种情况下,您可以使用默认实现协议。
创建默认实现协议:
import Foundation
import UIKit
protocol TitleSetupable: AnyObject {
func setupTitle()
}
extension TitleSetupable where Self: UIViewController {
func setupTitle() {
var navBar = self.navigationController?.navigationBar
navBar?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
}
}
在您的 ViewController 中使用:
class YourViewController: UIViewController, TitleSetupable {
override func viewDidLoad() {
super.viewDidLoad()
setupTitle()
}
}
1.Use 一个基本的 UIViewController,例如 BaseViewController,并将此代码放在 viewDidLoad 中,并将 UIViewController 替换为 BaseViewController。
2.You 可能不想对 UIViewController.Then 做任何事情,您可能会遇到术语 AOP.for 示例 Java 经常使用 AOP。
可以使用Aspects等AOP框架。
我在每个 UIViewController 中编写了以下代码:
var navBar = self.navigationController?.navigationBar
navBar?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
我不想在我创建的每个 UIViewController
中都写这些。我很懒惰,我不想重复自己。我无法在 extension
中添加它。那么我该怎么做才能在创建UIViewController
时不必编写这段代码?
在这种情况下,您可以使用默认实现协议。
创建默认实现协议:
import Foundation
import UIKit
protocol TitleSetupable: AnyObject {
func setupTitle()
}
extension TitleSetupable where Self: UIViewController {
func setupTitle() {
var navBar = self.navigationController?.navigationBar
navBar?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
}
}
在您的 ViewController 中使用:
class YourViewController: UIViewController, TitleSetupable {
override func viewDidLoad() {
super.viewDidLoad()
setupTitle()
}
}
1.Use 一个基本的 UIViewController,例如 BaseViewController,并将此代码放在 viewDidLoad 中,并将 UIViewController 替换为 BaseViewController。
2.You 可能不想对 UIViewController.Then 做任何事情,您可能会遇到术语 AOP.for 示例 Java 经常使用 AOP。
可以使用Aspects等AOP框架。