首页 > 解决方案 > 使用相同方法的多个 UI 扩展

问题描述

我想为一些 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

标签: swift

解决方案


正如 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)
    }
}

推荐阅读