使用相同方法的多个UI扩展

时间:2019-06-18 16:23:50

标签: swift

我想为某些UI元素(如UIView,UIButton,UILabel等)编写扩展名。

但是,如果2个扩展名中的2个方法具有相同的名称,请迅速说“不支持从扩展名覆盖非@objc声明”。

如果我改为“ @objc func”,Swift会说“覆盖声明需要一个'override'关键字”

public extension UIView {
    func setBackgroundImage( imageFileName: String ) {
        let bgImage = UIImage(named: imageFileName)!
        self.backgroundColor = UIColor(patternImage: bgImage)
    }
}

public extension UIButton {
    func setBackgroundImage( imageFileName: String ) {
        let bgImage = UIImage(named: imageFileName)!
        self.setImage(bgImage, for: .normal)
    }
}

我该怎么做?提前致谢 我使用的是Swift 5,Xcode 10.2

1 个答案:

答案 0 :(得分:-1)

正如Xcode所说,唯一的方法就是将其设置为@objc。 因此,将代码更改为:

public extension UIView {
    @objc func setBackgroundImage( imageFileName: String ) {
        let bgImage = UIImage(named: imageFileName)!
        self.backgroundColor = UIColor(patternImage: bgImage)
    }
}

public extension UIButton {
    @objc override func setBackgroundImage( imageFileName: String ) {
        let bgImage = UIImage(named: imageFileName)!
        self.setImage(bgImage, for: .normal)
    }
}