ios - 这个 Swift 代码是如何工作的??!!

标签 ios swift

我想知道为什么即使我尝试强制类型转换为错误的类型并在其上调用方法,以下代码也不会崩溃 !!!

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/

相关文章:

iphone - 使用 XML 的最佳方式是什么?

swift - 使用 Swift 3 和 Amazon SDK 显示图像上传到 Amazon S3 的上传进度

ios - 如何从 CIImage 中将 CVPixelBuffer 读取为 4 channel 浮点格式?

ios - 交互式 UIView 翻转过渡

ios - Realm Swift 仅在本地使用,但它仍会尝试在线连接

ios - 如何将当前单元格的数据与其在 TableView Swift 4 中的前一个单元格进行比较?

ios - 如何在 FMDB 查询 iOS Swift 4 中使用 Like with Text?

ios - 键盘打开时移动菜单(快速)

ios - 从 Parse 获取关系用户

swift - 检索 firebase 中仅包含特定值的对象