一、三目运算符
三目运算的一般类型:问题是否成立?结果1:结果2.
,问题如果成立,执行结果1
;相反,执行结果2
。
请看下面的例子,
var sectionHeight:Int = 30
let isResult:Bool = true
sectionHeight += (isResult == false ? 20:60);
print(sectionHeight)
如果满足isResult==false,sectionHeight
的增加量为20
;如果不满足isResult==false,sectionHeight
的增加量为60
。当然最后的输出结果为:90
.
提示:使用三目运算相比if-else
语句,代码更加简洁一些,但是同一代码块使用大量三目运算会降低代码的可读性。
二、空合运算符
空合运算符(a ?? b
)将对可选类型a
进行空判断,如果a
包含一个值就进行解封,否则就返回一个默认
值b
。表达式a
必须是Optional
类型。默认值b
的类型必须要和a
存储值的类型保持一致。
空合运算符是对以下代码的简短表达方法:
a != nil ? a! : b
上述代码使用了三目运算符。当可选类型a
的值不为空时,进行强制解封(a!
),访问a
中的值;反之返回默认值b
。空合运算符(??
)提供了一种更为简洁的方式去封装条件判断和解封两种行为,显得简洁以 及更具可读性。
如下,
/**第一种**/
let defaultValue = "My default string value"
var userUseString:String?
var userReturnValue:String = userUseString ?? defaultValue
print(userReturnValue)
/**第二种**/
let secondDefaultValue = "My second default value"
var secondUseString = userReturnValue ?? secondDefaultValue
print("\n\(secondUseString)")
第一种,userUseString
的默认值为空值可选类型,所以最后返回的是defaultValue
的值;
第二种,userReturnValue
在这一步已经有值,不为空,所以会强制解包userReturnValue!
,访问其中的值,最后的返回结果为"My default string value"
。
第三、区间运算符
闭区间运算
先看下面的例子
for var a:Int in 1...5
{
print("\(a) * \(1) = \(a * 1)");
}
输出结果
1 * 1 = 1
2 * 1 = 2
3 * 1 = 3
4 * 1 = 4
5 * 1 = 5
闭区间运算指在
1和5之间取值,包括1和5
,一般样式为a...b
半开区间
例子
for var b:Int in 1..<5
{
print("\(b) * \(1) = \(b * 1)");
}
输出结果
1 * 1 = 1
2 * 1 = 2
3 * 1 = 3
4 * 1 = 4
半开区间不同于数学上的开区间,它包含第一个数值,不包含最后一个数值,一般样式为
a..<b
第四、逻辑运算符组合计算
Swift上面的逻辑或(||)和逻辑与(&&)是左结合的,所以说在多远逻辑操作符的判断中,优先处理左边的运算。
如下例子,
let a:Int = 0
let b:Int = 100
let c:String = "Swift"
let d:String = "ObjC"
if a >= 0 || b < 100 && c > d {
print("这就是一个逻辑判断测试!");
}
else
{
print("测试没有通过");
}
如上 它们会优先处理a >= 0 || b < 100
,得到一个中间结果后,然后再与c >d
进行逻辑与判断。
当然,我们可以使用( )
括号来表明优先级,比如在 a >= 0 || (b < 100 && c > d)
中,它们会优先处理(b < 100 && c > d)
,然后再处理 a >= 0 || mid
。