我想为某些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
答案 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)
}
}