iOS swift objc_setAssociatedObject和objc_getAssociatedObject使用

Posted 简简单单,平平淡淡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS swift objc_setAssociatedObject和objc_getAssociatedObject使用相关的知识,希望对你有一定的参考价值。

oc中的AssociationsManager在swift中也是可以实现的 使用方法请看下面一个例子

import UIKit

extension UIButton {
    
    func fk_addAction(FKActionBlock:((UIButton)->Void)?){
        //保存block
        let key : UnsafeRawPointer! = UnsafeRawPointer.init(bitPattern: "fk_addAction:".hashValue)
        objc_setAssociatedObject(self, key, FKActionBlock, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        addTarget(self, action: #selector(itemClick(button:)), for:.touchUpInside)
    }
    
    func fk_addAction(FKActionBlock:((UIButton)->Void)? ,for event:Event){
        //保存block
        let key : UnsafeRawPointer! = UnsafeRawPointer.init(bitPattern: "fk_addAction:".hashValue)
        objc_setAssociatedObject(self, key, FKActionBlock, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
        addTarget(self, action: #selector(itemClick(button:)), for:event)
        
    }
    
    @objc private func itemClick(button:UIButton){
        let key : UnsafeRawPointer! = UnsafeRawPointer.init(bitPattern: "fk_addAction:".hashValue)
        objc_getAssociatedObject(self, key)
        if let fkBlock = objc_getAssociatedObject(self, key) as? ((UIButton)->Void){
            fkBlock(button)
        }
    }
}

这里是给UIButton添加一个分类,在分类中给UIButton拓展快速添加点击事件的方法通过block回传,通过objc_setAssociatedObject将block保存,触发点击事件后,通过objc_getAssociatedObject获取之前保存的block发起回调

以上是关于iOS swift objc_setAssociatedObject和objc_getAssociatedObject使用的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发中OC和swift的对比

ios OC、swift混编制作framework

iOS-swift-基础篇1

iOS开发系列--Swift 3.0

swift 2016年 - iOS / PlayerViewController.swift

swift iOS URL Schemes Swift