如何使用三元运算符编写代码?及优化指定Swift函数的实现方案
嗨,我来帮你梳理并优化这段Swift代码~
首先先拆解你原代码的逻辑:只要contactSelectViewList有选中的联系人,或者arrEmployeeCount不为空且包含员工数据,就启用btnDone按钮,否则禁用。
用三元运算符改写的版本
如果一定要用三元运算符,我们可以把两个条件合并成一个布尔表达式,再通过三元赋值:
func checkBtn() { // 用空合运算符处理arrEmployeeCount可能为nil的情况,nil时用0替代 let shouldEnable = self.contactSelectViewList.count > 0 || (arrEmployeeCount?.count ?? 0) > 0 btnDone.isEnabled = shouldEnable ? true : false }
不过其实这里的三元运算符有点多余——因为shouldEnable本身就是布尔值,直接赋值更简洁:
func checkBtn() { btnDone.isEnabled = self.contactSelectViewList.count > 0 || (arrEmployeeCount?.count ?? 0) > 0 }
更符合Swift风格的优化写法
在Swift里,判断集合是否为空推荐用isEmpty(比count > 0更高效,尤其是对于复杂集合),而且可读性更强。我们可以进一步优化:
func checkBtn() { // 拆分成两个语义清晰的变量,代码更易读 let hasSelectedContacts = !self.contactSelectViewList.isEmpty // arrEmployeeCount为nil时,?.isEmpty会返回nil,和false比较结果为false,正好符合原逻辑 let hasEmployees = arrEmployeeCount?.isEmpty == false btnDone.isEnabled = hasSelectedContacts || hasEmployees }
如果追求精简,也可以写成一行:
func checkBtn() { btnDone.isEnabled = !contactSelectViewList.isEmpty || arrEmployeeCount?.isEmpty == false }
这个版本既简洁,又完美复现了你原代码的逻辑,还符合Swift的最佳实践。
内容的提问来源于stack exchange,提问作者Amey
相关产品推荐
相关产品推荐

