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

2019-05-08  本文已影响0人  wangyongyue

大家看到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刷新
简单好理解,多好。
现在只能做到一对一,还不能做到一对多,还要丰富多个控件(原理不变,还可以方便扩展多个功能)
以这个为基础我们,继续进化吧。哈哈,出发皮卡丘

上一篇 下一篇

猜你喜欢

热点阅读