Swift 5 Method Swizzling, @_dynamicReplacement

@_dynamicReplacement
方法替换:https://www.jianshu.com/p/b3778b953a35
不具体说了,就说一下上面的关键字怎么用:
这里有好多 demo

class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        return true
    }
    
    dynamic func run(a: String) {
        print(a)
    }
    
    dynamic var a = 1
}

extension AppDelegate {
    @_dynamicReplacement(for: run(a:))
    func run_new(a: String) {
        print(self.a)
        run(a: "run new")
    }
    
    @_dynamicReplacement(for: a)
    var b: Int {
        a = a * 10
        return a
    }
}

@_dynamicReplacement 标记的方法中访问替换的方法或者对象, 就是原方法或者对象,在标记外的其他地方访问,走的是替换的方法。
即:
上面的代码,run_new 中访问的 self.a 走的是 bget 方法,但在 bget 方法中,访问的 a 是原属性 a

@_dynamicReplacement(for: a)
    var b: Int {
        a = a * 10
        return a
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,892评论 2 9
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,875评论 0 10
  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 9,070评论 0 13
  • 在昨天的文章中,我写道:现在的孩子,好像不做眼保健操了。至少,我的孩子所在的学校不做了。 有热心和关心...
    润树阅读 227评论 0 1