I think it did an unnecessary implicitly casting. For example, let y = Int(exactly: 5)
print(type(of:y)) // Optional<Int> You code equals to if let y:Int = Int(exactly: 5) { } However, I don't know why it did that. Maybe because of type inferring? Zhaoxin On Fri, Jun 2, 2017 at 8:40 PM, Martin R via swift-users < swift-users@swift.org> wrote: > This following code fails to compile (which is correct, as far as I can > judge that): > > if let x = 5 { } > // error: initializer for conditional binding must have Optional type, > not 'Int' > > But why is does it compile (with a warning) if an explicit type annotation > is added? > > if let y: Int = 5 { } > // warning: non-optional expression of type 'Int' used in a check for > optionals > > Tested with Xcode 8.3.2 and both the build-in Swift 3.1 toolchain and the > Swift 4.0 snapshot from May 25, 2017. > > I am just curious and would like to understand if there is fundamental > difference between those statements. > > Regards, Martin > > > > _______________________________________________ > swift-users mailing list > swift-users@swift.org > https://lists.swift.org/mailman/listinfo/swift-users > >
_______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users