如果语句占用太多代码,有没有办法简化这段代码?

时间:2016-10-27 02:51:53

标签: swift

我用x,y和z替换了我的代码。 目前我的代码运行如此,但我有很多行来检查x。有没有办法代替使用这个

if x != y && x != z

使用类似的东西

if x != y,z 
抱歉,我应该更好地解释一下。这是一段使用包含的更新代码,非常有用,谢谢!

if contactCreation.checkAllowed(newContact.contactDetails){
    if{contactCreation.blockedCreation.contains(newContact.contactDetails){
        watchList.addAttempt(newContact.contactDetails)
    }   
}else{
    newAccount.showReasons()
}

我想我的问题更多的是有没有办法检查x是否为y,如果x是z,但如果x是y + z则没有。基本上我想打电话

if x != y && x != z && x != d && != e

无需在一个if语句中每次都获取x。 所以像这样

if x != y && != z && != d && != e

感谢所有的帮助!

3 个答案:

答案 0 :(得分:1)

稍短的版本是为模式匹配运算符(~=)添加重载:

func ~=<T: Equatable>(pattern: [T], value: T) -> Bool {
    return pattern.contains(value)
}

if !([y,z] ~= x) {

}

如果该表达式看起来有点笨拙且你写了很多,你可以定义自己的运算符:

infix operator !!= : ComparisonPrecedence

func !!=<T: Equatable>(lhs: T, rhs: [T]) -> Bool {
    return !rhs.contains(lhs)
}

if x !!= [y,z] {

}

答案 1 :(得分:0)

您可以使用数组聚合和contains方法重写此条件,如下所示:

if ![y, z].contains(x) {
    ...
}

x是一个简单变量时,这没什么用,但是当x是复杂表达式时,它可以删除一些代码重复。

答案 2 :(得分:0)

我不会根据您为代码显示的内容提出建议,但您可以使用元组:

let testCase:(String,String) = ("hello","world")
if x != testCase {
    x = ("did not", "match")
}