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

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不是很精通,有不对的还请指教,多谢)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,081评论 6 13
  • 大家看到1的例子,感觉很简单吧但是计算属性无法扩展,怎么办?swift给了我们答案,运算符重载,这样的话,clas...
    wangyongyue阅读 161评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,132评论 1 32
  • 来吧,当我们用Vue的api完成swift响应式的编写到底会是什么样子的的呢?话不多说上代码示例:放一起有点长一段...
    wangyongyue阅读 91评论 0 0
  • 家,是我们的根,是我们中国人所思念的地方。随着改革开放,社会的发展,城市成为了年轻人们的聚集区,而家,老家,却成了...
    小小April为等雨阅读 509评论 0 6