如果不使用三元

时间:2019-06-01 10:59:41

标签: ios swift ternary-operator

我有这种if-else条件。

if UIDevice.current.iPad {
    if APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc {
        theImage.contentMode = .scaleAspectFill
    } else {
        theImage.contentMode = .scaleToFill
    }
} else {
    theImage.contentMode = .scaleAspectFill
}

如何使用三元运算符代替if-else条件。

我引荐了this链接..但没有帮助

2 个答案:

答案 0 :(得分:1)

在内部,如果:

if APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc {
   theImage.contentMode = .scaleAspectFill
} else {
   theImage.contentMode = .scaleToFill
}

礼物:

theImage.contentMode = (APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc) ? . scaleAspectFill : . scaleToFill

现在,如果我们在以下情况下达到最高级别:

theImage.contentMode = UIDevice.current.iPad ? insideIf : . scaleAspectFill

完整代码:

theImage.contentMode = UIDevice.current.iPad ? (APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc) ? . scaleAspectFill 
                                                                                                                                    : . scaleToFill 
                                             : . scaleAspectFill

那真的不是可重做的。

但是

if UIDevice.current.iPad {
    if APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc {
        theImage.contentMode = .scaleAspectFill
    } else {
        theImage.contentMode = .scaleToFill
    }
} else {
    theImage.contentMode = .scaleAspectFill
}

可能会转换为:

if UIDevice.current.iPad && !(APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc) {
    theImage.contentMode = .scaleToFill
} else {
    theImage.contentMode = .scaleAspectFill
}

那是较短的,但可能更难阅读。

如果是三元,则

theImage.contentMode = UIDevice.current.iPad && !(APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc) ? . scaleToFill : . scaleAspectFill

我认为?保留您的版本(或者如果我只使用一个版本,请保留版本)。尽管如此,编译器仍会进行优化,如果您能迅速了解其原因和作用,则两个月后更容易对其进行修复/修改。

答案 1 :(得分:0)

您可以将其分解为

theImage.contentMode = APIClient.shared.whiteLabel == .gld_default || APIClient.shared.whiteLabel == .abc ? .scaleAspectFill : .scaleToFill