我如何覆盖此 class 函数?

How can I override this class function?

我有一个扩展程序 class,我正在其中扩展 UIButton,如下所示,它工作正常。

extension UIButton {    
    class func backButtonTarget(_ target: Any, action: Selector) -> UIBarButtonItem {        
        let backButton = UIButton(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(58), height: CGFloat(15)))
        backButton.setTitle("Cancel",for: .normal)
        let barBackButtonItem = UIBarButtonItem(customView: backButton)
        backButton.addTarget(target, action: action, for: .touchUpInside)
        return barBackButtonItem
    }
}

但是现在,我需要为某个视图控制器更改它的标题,所以我在考虑它的覆盖,但失败了。如何覆盖它,以便我可以更改它的 title?

title 作为函数的 String 参数,以便您可以调用它并提供自定义标题。

class func backButtonTarget(_ target: Any, action: Selector, title: String) -> UIBarButtonItem {
        let backButton = UIButton(frame: CGRect(x: 0, y: 0, width: 58, height: 15))
        backButton.setTitle(title, for: .normal)
        let barBackButtonItem = UIBarButtonItem(customView: backButton)
        backButton.addTarget(target, action: action, for: .touchUpInside)
        return barBackButtonItem
    }
}

扩展可以not/should不覆盖。

无法覆盖扩展中的功能(如属性或方法),如 Apple Swift 指南中所述。

扩展可以为类型添加新功能,但不能覆盖现有功能。

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Extensions.html

您可以将条形按钮 Item 子类化为

class CustomBarButtonItem: UIBarButtonItem {

      override func awakeFromNib() {
      super.awakeFromNib()
      customize()
     }

     func customize() {
         frame = CGRect(x: CGFloat(0), y:    CGFloat(0), width: CGFloat(58), height: CGFloat(15))
         // Add more as per requirement
     }

}