美文网首页
iOS - swift 拓展添加属性

iOS - swift 拓展添加属性

作者: Th丶小伟 | 来源:发表于2022-09-22 00:15 被阅读0次

    Swift不允许在extension(类扩展)中直接添加属性。

    可以使用OC的关联属性(objc_set/getAssociatedObject)实现添加属性

    extension UIView{
        var name:String{
            get {
                return (objc_getAssociatedObject(self, &ExtensionViewKey) as? String)!
            }
            set {
                objc_setAssociatedObject(self, &ExtensionViewKey, newValue, .OBJC_ASSOCIATION_RETAIN)
            }
        }
    }
    

    应用

    让UIView具备使用闭包具备点击事件

    
    private var key: Void?
     
    extension UIView{
        var touchViewClick:((_ tap:Int)->Void)?{
            get {
                return objc_getAssociatedObject(self, &key) as? (Int) -> Void
            }
            set {
                objc_setAssociatedObject(self, &key, newValue, .OBJC_ASSOCIATION_RETAIN)
            }
        }
        func touchClick(_ block:@escaping (Int) -> Void){
            self.touchViewClick = block
            isUserInteractionEnabled = true
            let tap = UITapGestureRecognizer(target: self, action: #selector(extensionTouchClick))
            self.addGestureRecognizer(tap)
        }
        @objc func extensionTouchClick(tap:UITapGestureRecognizer){
            guard let tag = tap.view?.tag else {
                return
            }
            if let block = self.touchViewClick{
                block(tag)
            }
        }
    }
    

    用法

            let viewClick = UIView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
            viewClick.backgroundColor = .yellow
            self.view.addSubview(viewClick)
            viewClick.tag = 100
            viewClick.touchClick{
                print($0)
            }
    

    相关文章

      网友评论

          本文标题:iOS - swift 拓展添加属性

          本文链接:https://www.haomeiwen.com/subject/rbienrtx.html