如何在此Swift函数中减少返回false的数量

时间:2017-09-23 19:15:26

标签: swift function return

我感觉所有"返回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
    }

}

2 个答案:

答案 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 
}