Swift中如何实现变量值更新时仅打印一次,避免重复输出
解决Swift中重复打印同一值的问题
嘿,我来帮你搞定这个重复打印的问题!你现在遇到的情况是:每次收到type == "q"的消息时,不管新值和当前self.q是不是一样,你都会直接赋值、更新标签并打印,所以相同的值会被重复输出10-12次。咱们只需要加个简单的判断,就能实现只在值真正变化时才执行后续操作。
方案一:直接在赋值前添加判断
这是最直接的修改方式,在你的原有代码里加一个条件判断,只有当新收到的receivedQ和当前self.q不一样时,才更新变量、刷新标签并打印:
some func { if type == "q" { let json = JSON(receivedAsJSON) let receivedQ = json["q"].stringValue // 核心判断:只有新值≠旧值时才执行后续逻辑 if receivedQ != self.q { self.q = receivedQ self.updateLabels() print(self.q) } } } // function to update value received func updateLabels() { qLabel.stringValue = self.q }
方案二:用属性观察器(Property Observer)优化逻辑
如果想让代码更整洁、逻辑更封装,推荐用Swift的属性观察器。把更新和打印的逻辑放到q属性的didSet里,这样不管哪里给self.q赋值,都会自动处理判断逻辑:
// 给q属性添加didSet观察器 var q: String = "" { didSet { // 新值和旧值相同时直接返回,不执行后续操作 guard q != oldValue else { return } updateLabels() print(q) } } some func { if type == "q" { let json = JSON(receivedAsJSON) let receivedQ = json["q"].stringValue // 现在只需要赋值,剩下的逻辑交给didSet处理 self.q = receivedQ } } func updateLabels() { qLabel.stringValue = self.q }
这种方式的好处是把“值变化时的处理逻辑”和“赋值操作”分离开,代码更易维护,以后如果还有其他地方要修改q的值,也不用重复写判断逻辑啦。
内容的提问来源于stack exchange,提问作者Jay.Rana
相关产品推荐
相关产品推荐

