Objective-C转Swift时按位或运算符|=的用法及改写咨询
问题解答
|= 运算符含义
|= 是Objective-C中的按位或赋值运算符,由于OC的BOOL类型本质基于整数实现,这段代码中它的实际作用等价于逻辑或赋值:只要右侧表达式结果为真,就将左侧的isSelected设为YES,已经为YES的状态不会被后续运算改回NO。
Swift中的Bool是独立的布尔类型,不支持直接使用按位运算符操作布尔值,直接用原生逻辑判断实现对应逻辑即可。
Swift 实现代码
原代码逻辑为:只要date和非空的date1是同一天,或者和非空的date2是同一天,isSelected就为真,最终控制选中层的隐藏状态,有两种常见实现方式:
可读性优先写法
var isSelected = false if let date1 = self.date1, gregorian.isDate(date, inSameDayAs: date1) { isSelected = true } if let date2 = self.date2, gregorian.isDate(date, inSameDayAs: date2) { isSelected = true } rangeCell.selectionLayer.isHidden = !isSelected
简洁写法
let isSelected = (date1 != nil && gregorian.isDate(date, inSameDayAs: date1)) || (date2 != nil && gregorian.isDate(date, inSameDayAs: date2)) rangeCell.selectionLayer.isHidden = !isSelected
内容的提问来源于stack exchange,提问作者Evgeniy Kleban
相关产品推荐
相关产品推荐

