if else 使用三元

Using ternary for if else

我有这个 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 条件..

我提到了 link..但没有帮助

对于内部 if:

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

在我看来?保留你的版本(或者我只使用一个 if/else 的版本)。尽管如此,编译器还是会进行优化,如果您能快速理解它的原因和作用,那么两个月后 fix/modify 它会更容易。

您可以将其分解为

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