如何避免在Swift的UIViewController中再次编写相同的代码?

时间:2020-05-31 01:55:40

标签: swift uiviewcontroller uinavigationcontroller uinavigationbar swift5.2

我在每个UIViewController中编写以下代码:

var navBar = self.navigationController?.navigationBar
    navBar?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

我不想在创建的每个UIViewController中写这些。我很懒,我不想重复自己。我无法在extension中添加它。那么创建UIViewController时我不必写这段代码怎么办?

2 个答案:

答案 0 :(得分:1)

1。使用基本的UIViewController(例如BaseViewController)并将此代码放入viewDidLoad中,并用BaseViewController替换UIViewController。

2。您可能不想对UIViewController做任何事情。然后,您可能会遇到术语AOP。例如Java经常使用AOP。

您可以使用Aspects之类的AOP框架。

答案 1 :(得分:0)

在这种情况下,您可以使用默认的实现协议。

创建默认实施协议:

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()
    }
}