斯威夫特:如果让冗余

时间:2017-04-20 00:07:31

标签: swift

我刚刚加入了一个包含大量现有代码的项目。以前的程序员可能不熟悉Swift,或者在Swift语言的早期阶段开始开发。他们似乎以奇怪的方式使用if let语句。他们似乎想将该陈述用作if is let。在编辑代码之前,我想知道是否有任何有效用途:

// In JSON parser

if value is String, let string = value as? String {
       document.createdBy = string
}

首先检查值String的值是否对我来说似乎是多余的。 Swift不会在声明的let string = value as? String部分检查这个吗?

问题

为什么需要检查两次?或者是否有理由这样做?

1 个答案:

答案 0 :(得分:1)

你是对的,这是多余的。如果value不是字符串,则value as? String将返回nil,条件绑定将失败。

要检查类型,而不是使用转换结果:

if value is String {
    // Do something that doesn't require `value` as a string
}

检查类型并使用结果:

if let value = value as? String { // The new name can shadow the old name
       document.createdBy = value
}

两者都没有意义。