zoukankan      html  css  js  c++  java
  • 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发起回调

  • 相关阅读:
    CF351A Jeff and Rounding 思维
    CF352B Jeff and Periods 模拟
    CF352A Jeff and Digits
    小B的询问 莫队分块
    小凯的疑惑 数学
    BestCoder Round #80 待填坑
    [SDOI2009]HH的项链 树状数组 BZOJ 1878
    Blocks poj 区间dp
    [USACO5.4]奶牛的电信Telecowmunication 最小割
    数位dp
  • 原文地址:https://www.cnblogs.com/qqcc1388/p/9851663.html
Copyright © 2011-2022 走看看