Swift 看似相同的if-let块之间的行为不一致

Swift 看似相同的if-let块之间的行为不一致,swift,if-statement,optional,Swift,If Statement,Optional,我的cellForRowAt函数中有此代码: if let modifiedDate = deliveryItem.modifiedDate?.toString(format: "M/d/yy"), let modifiedBy = deliveryItem.modifiedBy { cell.detailTextLabel?.text += " (MODIFIED: \(modifiedDate) BY: \(modifiedBy))" } 但它跳过了内行,即使这两个属性的值都不

我的
cellForRowAt
函数中有此代码:

if let modifiedDate = deliveryItem.modifiedDate?.toString(format: "M/d/yy"), let modifiedBy = deliveryItem.modifiedBy {
    cell.detailTextLabel?.text += "   (MODIFIED: \(modifiedDate) BY: \(modifiedBy))"
}
但它跳过了内行,即使这两个属性的值都不是nil。一时兴起,我尝试将
toString
调用移动到内行:

if let modifiedDate = deliveryItem.modifiedDate, let modifiedBy = deliveryItem.modifiedBy {
    cell.detailTextLabel?.text += "   (MODIFIED: \(modifiedDate.toString(format: "M/d/yy")) BY: \(modifiedBy))"
}
突然,它开始工作并产生预期的产出。就我所知,这两段代码在功能上似乎完全相同,所以我不明白为什么它第一次不起作用。我甚至试着在控制台中运行
deliveryItem.modifiedDate?.toString(格式:“M/d/yy”)
,只是为了确保这一点,结果它返回了一个非零的值

下面是
toString
函数,但我也没有看到任何会影响值展开的内容:

extension Date {
    func toString (format: String?) -> String {
        guard let format = format else {
            return ""
        }

        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = format
        return dateFormatter.string(from: self)
    }
}
应已传递的数据示例:

modifiedDate = (Date?) 2018-10-05 23:50:00 UTC
modifiedBy = (String?) "SC"

不相关,但向用户显示格式为
M/d/yy
的日期是一个非常糟糕的主意。许多用户会感到困惑。
10/8/18
是什么意思?是2018年10月8日、2018年8月10日还是2010年8月18日?最好使用日期或时间样式向用户显示日期(和/或时间),不是硬编码格式。@rmaddy这是针对特定客户的格式,这是他们想要的格式。您能否给出
deliveryItem.modifiedDate
deliveryItem.modifiedBy
的示例,其中
单元格.detailTextLabel?.text+=…
未执行?不相关,但为什么
格式
参数是可选的?调用函数时,确实希望将日期转换为字符串,如果要传递
nil
@Carpsen90,则在编译时会出现错误。vadian,它还用于另一个地方,其中格式来自外部源,如果缺少格式,则决定返回空字符串。