我感觉所有"返回false"此函数中的语句可能是多余的。我经常遇到类似的情况。我想避免任何额外代码的膨胀。
问题:有没有办法减少"返回false"语句仍然具有相同的功能吗?
对于上下文,我试图有效地检查UserDefaults中的Int数组,看它是否包含特定的整数。
func isItemNumberInList(itemNumber : Int) -> Bool{
if UserDefaults.standard.object(forKey: "myList") != nil{
if var myList : [Int] = UserDefaults.standard.object(forKey: "myList") as? [Int]{
if myList.index(of: itemNumber) != nil {
return true
}else{
return false
}
}else{
return false
}
}else{
return false
}
}
答案 0 :(得分:3)
func isDockNumberInList(dockNumber : Int) -> Bool {
guard let myList = UserDefaults.standard.array(forKey: "myList") as? [Int],
myList.contains(dockNumber) else { return false }
return true
}
或
func isDockNumberInList(dockNumber : Int) -> Bool {
guard let myList = UserDefaults.standard.array(forKey: "myList") as? [Int] else { return false }
return myList.contains(dockNumber)
}
答案 1 :(得分:1)
最简单的解决方案是删除你的第一个if语句,因为它是完全冗余的,因为条件绑定只有在值为非零时才能成功。然后你也可以将两个内部if语句合并为一个,因为你只关心它们是否都是真的。
func isItemNumberInList(itemNumber : Int) -> Bool{
if let myList = UserDefaults.standard.object(forKey: "myList") as? [Int], myList.index(of: itemNumber) != nil {
return true
} else {
return false
}
}
else语句可以省略,因为如果if语句的计算结果为true,则函数将通过返回true退出,因此只有在if语句被求值之前才能达到return false
表达式假的。
func isItemNumberInList(itemNumber : Int) -> Bool{
if let myList = UserDefaults.standard.object(forKey: "myList") as? [Int], myList.index(of: itemNumber) != nil {
return true
}
return false
}