[swift-users] Optional binding with non-optional expression
    Martin R 
    martinr448 at gmail.com
       
    Sun Jun  4 05:00:35 CDT 2017
    
    
  
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 <owenzx at 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 at 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 at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
> 
> 
    
    
More information about the swift-users
mailing list