我想知道为什么即使我尝试将类型强制转换为错误的类型并对其调用方法,以下代码也不会崩溃!
struct Apple{
}
struct Mango{
}
struct Orange{
}
func getValue(dict:[String:Any?]){
for value in dict.values{
if ( (value is [Apple]) && ((value as! [Apple]).isEmpty == false) ) {
print("Apple")
}
if value is [Mango]{
print("Mango")
}
if value is [Orange]{
print("Orange")
}
}
}
getValue(dict: ["name":[Mango()]])
答案 0 :(得分:2)
这是质量很差的代码。但这不会崩溃,因为对AND操作的第二个操作数进行了延迟计算。也就是说,当第一个操作数为false
时,与第二个操作数无关,AND运算的结果将为false
,因此第二个操作数的值甚至都不会求值。据说是“短路”。
func f1() -> Bool {
print("Left side evaluated to `false`")
return false
}
func f2() -> Bool {
print("Right side evaluated")
return true
}
print(f1() && f2())
// Outputs:
// Left side evaluated to `false`
// false