swift - 使用相同方法的多个 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
解决方案
正如 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)
}
}
推荐阅读
- elasticsearch - 使用突出显示优化弹性搜索查询
- cookies - 任何人都知道 TS# cookie 是什么以及它用于什么样的数据?
- spring-boot - 具有几何返回类型的 Spring 数据存储库和本机查询
- javascript - 在鼠标按钮按下时重复执行代码
- typescript - 如何从联合中提取单个类型?
- python - 使用 RK4(硬编码)的 Lane-emden 解决方案
- java - 为语料库建立一个简单的索引
- excel - 度数 [0 到 359] 到时间 [01:00 到 12:59] 的转换
- java - 调用 Store 过程时获取 ClassCastException(布尔到字符串)
- javascript - $.change() 不会检测到所有具有相同名称的输入更改