当在Swift中编码时,什么是`?`或者`:`

jus*_*lbs 1 ios swift

我在臭名昭着的SevenSwitch课程中遇到了一行代码.

这是线......

backgroundView.layer.cornerRadius = self.isRounded ? frame.size.height * 0.4 : 2
Run Code Online (Sandbox Code Playgroud)

我不明白是什么?:在等式的末尾.有人可以解释一下这些是什么意思以及如何使用它们?

Gre*_*reg 7

那是三元运营商

基本上它是说"如果是圆形的话,将背景视图的角半径设置为帧高度的0.4倍,否则将角半径设置为2".


Ash*_*kad 5

运算符可以是一元,二元或三元的:

这是三元运营商在三个目标上运营.与C一样,Swift只有一个三元运算符,即三元条件运算符(a?b:c).

来自Apple Documents Basic Operators

三元条件算子

三元条件运算符是一个特殊的运算符,有三个部分,它采用形式问题?回答1:回答2.它是根据问题是真还是假来评估两个表达式之一的快捷方式.如果问题为真,则评估answer1并返回其值; 否则,它会评估answer2并返回其值.

根据你的问题,如果isRound是真的那么角落无线电是frame.size.height其他它是2.

如同条件:

if(self.isRounded){
    backgroundView.layer.cornerRadius = frame.size.height * 0.4
}
else{
    backgroundView.layer.cornerRadius = 2.0
}
Run Code Online (Sandbox Code Playgroud)


Joj*_*dmo 5

?:ternary operators.它们只是if语句的简写.

var a = b ? c : dwhere b为布尔值的英文翻译设置acif 等于btrue,将dif设置b为false.

所以,例如,

backgroundView.layer.cornerRadius = self.isRounded ? frame.size.height * 0.4 : 2
Run Code Online (Sandbox Code Playgroud)

可以翻译成

if(self.isRounded){
    backgroundView.layer.cornerRadius = frame.size.height * 0.4
}
else{
    backgroundView.layer.cornerRadius = 2
}
Run Code Online (Sandbox Code Playgroud)

  • @justColbs没问题,你应该养成使用三元运算符的习惯 - 这是一个真正的节省时间 (2认同)