我刚刚加入了一个包含大量现有代码的项目。以前的程序员可能不熟悉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
部分检查这个吗?
问题
为什么需要检查两次?或者是否有理由这样做?
答案 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
}
两者都没有意义。