[url=https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html#//apple_ref/doc/uid/TP40014097-CH8-XID_135]数组 [/url]
[b]逻辑运算符[/b]
逻辑运算符修改或结合布尔逻辑值true和false。Swift支持这三个标准逻辑运算符基于c语言:
◎Logical NOT (!a)
◎Logical AND (a && b)
◎Logical OR (a || b)
[b]逻辑非运算符[/b]
逻辑非运算符(!a)转化一个Bollean值,true变成false,false变成true。
逻辑操作符是一个前缀操作符, 并立即出现在它修饰的值之前,没有任何空白,它被解读为”不是”, 见下面的例子:
let allowedEntry = false
if !allowedEntry {
println("ACCESS DENIED")
}
// prints "ACCESS DENIED"
这句话if !allowedEntry 能理解为 “if not allowedEntry.” 只执行后续的行,如果“not allowedEntry” 是 true; 那就是说 if allowedEntry是false.
在这个例子中,精心挑选的布尔常量和变量名可以帮助保持代码的可读性和简洁,同时避免双重否定或混乱的逻辑语句。
[b]逻辑与运算符[/b]
逻辑与运算符:(A && B)创建的表达式中,A和B两个值必须同时为true时表达式才正确。
其中A或者B有任一值是false时,逻辑与算符表示不成立,必须两者同时为true时才成立。事实上,如果第一个值是false,第二个值甚至不会再进行判断,因为必须是两个值皆为true,已经有一方false、则没必要再往下面进行判断了。这被称作短路条件。
以下这个例子判断两个Bool 类型的值,并只有这两个值都为真的时候会输出:Welcome。失败则输出”ACCESS DENIED”:
let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
println("Welcome!")
} else {
println("ACCESS DENIED")
}
// prints "ACCESS DENIED”
[b]逻辑或运算符[/b]
表达式(a || b)运算符中、只要a或者b有一个为true,表达式就成立。
与上面的逻辑与运算符相似,逻辑或运算符使用短路条件判断,如果左边是 true,那么右边不会被判断,因为整体结果不会改变了。
在下面的例子中,第一个布尔值(hasDoorKey)为false,但第二个值(knowsOverridePassword)为true。因为两者有一个值是true,整个表达式的计算结果也为true,正确输出:Welcome!
let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
println("Welcome!")
} else {
println("ACCESS DENIED")
}
// prints "Welcome!"
[b]复合逻辑表达式[/b]
你可以将多个逻辑运算符复合来创建更长的复合表达式:
if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
println("Welcome!")
} else {
println("ACCESS DENIED")
}
// prints "Welcome!"
相比于之前两个单独分开的运算符,本次通过多重嵌套、将我们上面的&&、|| 运算符相结合组合成一个较长的复合表达式。看起来有点饶人、其实本质还是两两相比较、可以简单地看成A && B || C || D、从左往右根据运算符优先级进行判断、注意区分开&&、||、只要牢记运算逻辑&&需要两者都为true、||则只需要一方为true则运算符正确即可解析整个复合表达式、透过现象看本质。
[b]明确地括号(翻译成中文语句不连贯太特么饶人了、怒了自己理解。)[/b]
复合表达式中,我们可以添加进()使确逻辑意图更加明确,上面的例子中,我们可以在第一部分上加括号来使意义更明确。
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
println("Welcome!")
} else {
println("ACCESS DENIED")
}
// prints "Welcome!"
在复合逻辑表达式中、我们可以使用括号明确地表示我们需要将几个值放在一个单独的逻辑运算中去判断得出结果、最后根据()内的结果再去与后面的值进行判断、看上面的例子、就像我们小学学加减乘除一样、如果没有括号()我们肯定是按照运算符的优先级去判断、但此时有了括号、我们需要先运算其中的逻辑运算符得到它们的值.使用括号()在符合逻辑表达式中可以更明确的你的意图。