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發起回調


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM