所选类实例的Swift扩展

在Objective-C类别中,您可以通过在类中包含类别的标题来引入类别方法引入的扩展功能.

似乎所有Swift扩展都是在没有导入的情况下自动引入的.你如何在Swift中实现同样的目标?

例如:

extension UIView {
  // only want certain UIView to have this,not all
  // similar to Objective-C,where imported category header
  // will grant the capability to the class
  func extraCapability() {

  }
}
定义一个将作为选择的协议,扩展应该是否可用:
protocol UIViewExtensions { }

然后定义协议的扩展,但仅限于UIView的子类(反过来不起作用):

extension UIViewExtensions where Self: UIView {
    func testFunc() -> String { return String(tag) }
}

定义为具有协议的类也将具有扩展名:

class A: UIView,UIViewExtensions { }    
A().testFunc() //has the extension

如果没有定义协议,它也没有扩展名:

class B: UIView {}    
B().testFunc() //execution Failed: MyPlayground.playground:17:1: error: value of type 'B' has no member 'testFunc'

UPDATE

protocol extensions don’t do class polymorphism开始,如果你需要覆盖函数,我唯一能想到的就是子类:

class UIViewWithExtensions: UIView {
    override func canBecomeFocused() -> Bool { return true }
}
UIViewWithExtensions().canBecomeFocused() // returns true

这也可以与扩展相结合,但我认为它不再有意义了.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...