我想知道为什么即使我尝试强制类型转换为错误的类型并在其上调用方法,以下代码也不会崩溃 !!!
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()]])
最佳答案
这确实是质量很差的代码。但它不会崩溃,因为 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
关于ios - 这个 Swift 代码是如何工作的??!!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51678266/