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

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

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

    2里面写了一对一的,因为在Response里面只声明一个响应者(block),想要一对多就需要一个队列了,
    加一个array就行了吧。
    上代码试试看:

    var re = Response()
        override func viewDidLoad() {
            super.viewDidLoad()
            
            // Do any additional setup after loading the view.
            self.view.backgroundColor = UIColor.white
            
            let label = RLabel()
            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 label1 = RLabel()
            label1.backgroundColor = UIColor.blue
            label1.textColor = UIColor.red
            label1.frame = CGRect.init(x: 200, y: 80, width: 80, height: 30)
            self.view.addSubview(label1)
            
            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)
            
            label.addResponse(re: re)
            label1.addResponse(re: re)
    
            print(re[8])
           
        }
        @objc func addText(){
            re.text = "wyy_click"
        }
        
    }
    class RLabel:UILabel{
        func addResponse(re:Response){
            re.responseContent({[weak self] in
    
                self?.text = re.text
            })
        }
      
    }
    
    typealias responseBlock = () -> ()
    class Response:NSObject{
        
        //响应者队列
        var array = Array<responseBlock>()
        private var _text:String?
        var text:String?{
            set{
                _text = newValue
                sendReponserMsg()
            }
            get{
                return _text
            }
        }
        func responseContent(_ callBack:@escaping responseBlock){
            array.append(callBack)
        }
        //触发响应
        func sendReponserMsg(){
            
            for value in array{
                
                value()
            }
        }
        //下标
        subscript(index:Int) -> String?{
        
            return "sub"
        }
        //运算符重载
        static func + (a:Response,b:Response) -> Response{
            
            let c = Response()
            c.text = a.text! + b.text!
            return c
        }
    }
    
    

    还不错,简简单单的就把功能实现了。
    但是仍然无法运用的到编程中,还不够完善因为现在只有一个RLable和Response(text)对象,
    继续丰富他吧。
    Vue非常的流行,我也非常喜欢。就照着Vue的api来完整他吧。(对html不是很精通,有不对的还请指教,多谢)

    相关文章

      网友评论

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

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