I don’t think that explains it (or perhaps I did not understand your response correctly).
Here is the same issue with a custom type (which does not have a failable initializer): struct A { } if let a = A() { } // error: initializer for conditional binding must have Optional type, not 'A' if let a: A = A() { } // warning: non-optional expression of type 'A' used in a check for optionals > Am 02.06.2017 um 15:49 schrieb Zhao Xin <owe...@gmail.com>: > > 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