美文网首页
致那些复杂的响应式框架2

致那些复杂的响应式框架2

作者: wangyongyue | 来源:发表于2019-05-08 22:31 被阅读0次

    大家看到1的例子,感觉很简单吧
    但是计算属性无法扩展,怎么办?
    swift给了我们答案,运算符重载,这样的话,class就有了可以计算的能力。
    那么就可以创建类似Int,string的类了,甚至更好。
    再来一个简单的例子:

        let label = RLabel()
        var re = Response()
       
        override func viewDidLoad() {
            super.viewDidLoad()
            
            // Do any additional setup after loading the view.
            self.view.backgroundColor = UIColor.white
            
            
            label.backgroundColor = UIColor.blue
            label.textColor = UIColor.red
            label.frame = CGRect.init(x: 50, y: 80, width: 80, height: 30)
            self.view.addSubview(label)
            
            let button = UIButton()
            button.setTitle("button", for: .normal)
            button.setTitleColor(UIColor.black, for: .normal)
            button.addTarget(self, action: #selector(addText), for: .touchUpInside)
            self.view.addSubview(button)
            button.frame = CGRect.init(x: 50, y: 180, width: 80, height: 30)
            
     
            self.label.re = re
    
            
        }
        @objc func addText(){
            
            
            re.text = "wyy_click"
            
        }
        
    }
    class RLabel:UILabel{
        private var _re:Response?
        var re:Response?{
            set{
                
                _re = newValue
                callBack()
            }
            get{
                
                return _re
            }
            
        }
        func callBack(){
            
            re?.responseContent({[weak self] in
     
                self?.text = self?.re?.text
            })
        }
        
    }
    
    typealias responseBlock = () -> ()
    
    class Response:NSObject{
        
        var block:responseBlock?
        private var _text:String?
        var text:String?{
            set{
                _text = newValue
                block?()
            }
            get{
                return _text
            }
        }
        func responseContent(_ callBack:@escaping responseBlock){
            
            self.block = callBack
        }
        
       
    }
    

    RLabel 封装的view需要在响应做刷新
    Response text的响应类,数据双向绑定
    通text setter方法出发block,RLabel接受到block完成view刷新
    简单好理解,多好。
    现在只能做到一对一,还不能做到一对多,还要丰富多个控件(原理不变,还可以方便扩展多个功能)
    以这个为基础我们,继续进化吧。哈哈,出发皮卡丘

    相关文章

      网友评论

          本文标题:致那些复杂的响应式框架2

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